//切换fragment的放法就不写了
//fragment中的展示数据
public class IndexFragment extends Fragment {
private XListView xlv;
private ResultSecond resultSecond;
private ResultThird resultThird;
private Handler myHandler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(resultSecond!=null && resultThird!=null){
MyAdapter adapter=new MyAdapter(getActivity(),resultSecond,resultThird);
xlv.setAdapter(adapter);
//关闭头部布局
xlv.stopRefresh();
xlv.setRefreshTime("刚刚");
}else{
sendEmptyMessageDelayed(0,1000);
}
}
};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v=inflater.inflate(R.layout.index,null);
xlv = v.findViewById(R.id.xlv);
return v;
}
@Override
public void onActivityCreated( Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
xlv.setPullLoadEnable(false);
xlv.setPullRefreshEnable(true);
xlv.setXListViewListener(new XListView.IXListViewListener() {
@Override
public void onRefresh() {
resultSecond=null;
resultThird=null;
//注意:异步任务要调用
MyTask myTask=new MyTask();
myTask.execute("http://120.27.23.105/product/getCatagory","1");
MyTask myTask1=new MyTask();
myTask1.execute("http://120.27.23.105/ad/getAd","2");
}
@Override
public void onLoadMore() {
}
});
//判断网络是否连接
if(NetStateUtil.isConn(getContext())){
//注意:异步任务要调用
MyTask myTask=new MyTask();
myTask.execute("http://120.27.23.105/product/getCatagory","1");
MyTask myTask1=new MyTask();
myTask1.execute("http://120.27.23.105/ad/getAd","2");
}else{
NetStateUtil.openDg(getContext());
}
}
class MyTask extends AsyncTask<String,Void,String> {
//区分不同的url
private String type="1";
@Override
protected String doInBackground(String... strings) {//string... 可变化数组
type=strings[1];
StringBuilder builder=new StringBuilder();
//1.根据url创建URL
try {
URL url=new URL(strings[0]);
//2.打开连接
HttpURLConnection conn =(HttpURLConnection) url.openConnection();
//3.设置
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
conn.setReadTimeout(5000);
//4.判断结果码
if(conn.getResponseCode()==200){
//5.获取数据
InputStream inputStream = conn.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(inputStream));
String str;
while ((str=reader.readLine())!=null){
builder.append(str);
}
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Log.d("zzz",builder.toString());
return builder.toString();
}
//async 执行完 doinbackground..后 马上来执行onPostExecute方法
@Override
protected void onPostExecute(String s) {
Gson gson=new Gson();
if("1".equals(type)){
resultSecond = gson.fromJson(s, ResultSecond.class);
}else {
resultThird = gson.fromJson(s, ResultThird.class);
}
//发消息 由于要一起访问两个接口可以用handler发送消息
myHandler.sendEmptyMessage(0);
}
}
}
/*
*主适配器写法
*
*/
class MyAdapter extends BaseAdapter{
private final int TYPE_01=0;
private final int TYPE_02=1;
private final int TYPE_03=2;
private Context context;
private ResultSecond resultSecond;
private ResultThird resultThird;
public MyAdapter(Context context, ResultSecond resultSecond, ResultThird resultThird) {
this.context = context;
this.resultSecond = resultSecond;
this.resultThird = resultThird;
}
DisplayImageOptions options=new DisplayImageOptions.Builder()
.cacheInMemory(true)//使用内存缓存
.cacheOnDisk(true)//使用磁盘缓存
.showImageOnLoading(R.mipmap.ic_launcher)//设置正在下载的图片
.showImageForEmptyUri(R.mipmap.ic_launcher)//url为空或请求的资源不存在时
.showImageOnFail(R.mipmap.ic_launcher)//下载失败时显示的图片
.bitmapConfig(Bitmap.Config.RGB_565)//设置图片色彩模式
.imageScaleType(ImageScaleType.EXACTLY)//设置图片的缩放模式===imageView,,ScaleType
.displayer(new RoundedBitmapDisplayer(50))//设置图片圆角显示 弧度
.build();
@Override
public int getViewTypeCount() {
return 3;
}
@Override
public int getItemViewType(int position) {
if(position%3==0){
return TYPE_01;
}else if(position%3==1){
return TYPE_02;
}else{
return TYPE_03;
}
}
@Override
public int getCount() {
return 3;
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
int type=getItemViewType(i);
if(type==TYPE_01){
ViewHolder1 viewHolder1;
if(view==null){
view=View.inflate(context,R.layout.item1,null);
viewHolder1=new ViewHolder1();
viewHolder1.imageView=view.findViewById(R.id.img);
view.setTag(viewHolder1);
}else{
viewHolder1=(ViewHolder1) view.getTag();
}
return view;
}else if(type==TYPE_02){
ViewHolder2 viewHolder2;
if(view==null){
view=View.inflate(context,R.layout.item2,null);
viewHolder2=new ViewHolder2();
viewHolder2.gridView=view.findViewById(R.id.gv);
view.setTag(viewHolder2);
}else{
viewHolder2=(ViewHolder2) view.getTag();
}
viewHolder2.gridView.setAdapter(new MyGvAdapter_Second(resultSecond.getData(),context));
return view;
}else{
ViewHolder3 viewHolder3;
if(view==null){
view=View.inflate(context,R.layout.item3,null);
viewHolder3=new ViewHolder3();
viewHolder3.gridView=view.findViewById(R.id.gv);
view.setTag(viewHolder3);
}else{
viewHolder3=(ViewHolder3) view.getTag();
}
viewHolder3.gridView.setAdapter(new MyGvAdapter_Third(resultThird,context));
return view;
}
}
class ViewHolder1{
ImageView imageView;
}
class ViewHolder2{
GridView gridView;
}
class ViewHolder3{
GridView gridView;
}
}
/*
*MyGvAdapter_Second适配器写法
*
*/
public class MyGvAdapter_Second extends BaseAdapter {
private List<ResultSecond.DataBean> data;
private Context context;
DisplayImageOptions options=new DisplayImageOptions.Builder()
.cacheInMemory(true)//使用内存缓存
.cacheOnDisk(true)//使用磁盘缓存
.showImageOnLoading(R.mipmap.ic_launcher)//设置正在下载的图片
.showImageForEmptyUri(R.mipmap.ic_launcher)//url为空或请求的资源不存在时
.showImageOnFail(R.mipmap.ic_launcher)//下载失败时显示的图片
.bitmapConfig(Bitmap.Config.RGB_565)//设置图片色彩模式
.imageScaleType(ImageScaleType.EXACTLY)//设置图片的缩放模式===imageView,,ScaleType
.displayer(new RoundedBitmapDisplayer(50))//设置图片圆角显示 弧度
.build();
public MyGvAdapter_Second(List<ResultSecond.DataBean> data, Context context) {
this.data = data;
this.context = context;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder viewHolder;
if(view==null){
view=View.inflate(context,R.layout.gv_item_second,null);
viewHolder=new ViewHolder();
viewHolder.imageView=view.findViewById(R.id.img);
viewHolder.textView=view.findViewById(R.id.tv);
view.setTag(viewHolder);
}else{
viewHolder=(ViewHolder) view.getTag();
}
ImageLoader.getInstance().displayImage(data.get(i).getIcon(),viewHolder.imageView,options);
viewHolder.textView.setText(data.get(i).getName());
return view;
}
class ViewHolder{
ImageView imageView;
TextView textView;
}
}
/*
*MyGvAdapter_Third适配器写法
*
*/
public class MyGvAdapter_Third extends BaseAdapter {
private ResultThird data;
private Context context;
private List<ResultThird.DataBean> listData;
private List<ResultThird.TuijianBean.ListBean> tuijianData;
DisplayImageOptions options=new DisplayImageOptions.Builder()
.cacheInMemory(true)//使用内存缓存
.cacheOnDisk(true)//使用磁盘缓存
.showImageOnLoading(R.mipmap.ic_launcher)//设置正在下载的图片
.showImageForEmptyUri(R.mipmap.ic_launcher)//url为空或请求的资源不存在时
.showImageOnFail(R.mipmap.ic_launcher)//下载失败时显示的图片
.bitmapConfig(Bitmap.Config.RGB_565)//设置图片色彩模式
.imageScaleType(ImageScaleType.EXACTLY)//设置图片的缩放模式===imageView,,ScaleType
.displayer(new RoundedBitmapDisplayer(50))//设置图片圆角显示 弧度
.build();
public MyGvAdapter_Third(ResultThird data, Context context) {
this.data = data;
this.context = context;
listData=data.getData();
tuijianData=data.getTuijian().getList();
}
@Override
public int getCount() {
return data.getData().size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder viewHolder;
if(view==null){
view=View.inflate(context,R.layout.gv_item_third,null);
viewHolder=new ViewHolder();
viewHolder.imageView=view.findViewById(R.id.img);
viewHolder.tvTitle=view.findViewById(R.id.tv_title);
viewHolder.tvPrice=view.findViewById(R.id.tv_price);
view.setTag(viewHolder);
}else{
viewHolder=(ViewHolder) view.getTag();
}
ImageLoader.getInstance().displayImage(listData.get(i).getIcon(),viewHolder.imageView,options);
viewHolder.tvTitle.setText(tuijianData.get(i).getTitle());
viewHolder.tvPrice.setText("¥"+tuijianData.get(i).getPrice());
return view;
}
class ViewHolder{
ImageView imageView;
TextView tvTitle;
TextView tvPrice;
}
}
/*
*判断网络
*/
public class NetStateUtil {
public static boolean isConn(Context context){
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = (NetworkInfo) manager.getActiveNetworkInfo();
if(info!=null && info.isAvailable()){
return true;
}
return false;
}
public static void openDg(final Context context){
AlertDialog.Builder builder=new AlertDialog.Builder(context);
builder.setMessage("是否要进行网络连接设置?");
builder.setPositiveButton("设置", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Intent intent=null;
//判断手机系统的版本 即API大于10 就是3.0或以上版本
if(android.os.Build.VERSION.SDK_INT>10){
intent = new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);
}else{
intent = new Intent();
ComponentName component = new ComponentName("com.android.settings","com.android.settings.WirelessSettings");
intent.setComponent(component);
intent.setAction("android.intent.action.VIEW");
}
context.startActivity(intent);
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
builder.create().show();
}
}
/*
*MyApplication
*/
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//整个app的入口函数--程序运行后只会被执行一次
Toast.makeText(this,"application!",Toast.LENGTH_SHORT).show();
//自定义磁盘缓存路径 系统默认的缓存路径 sd...<package>..cache 当app被卸载时,此路径下的缓存图片一并被删除
//File cacheDir=getExternalCacheDir();
File cacheDir= new File(Environment.getExternalStorageDirectory().getPath()+"/image");//自定义 sd卡的缓存路径
//第一步:对ImageLoader进行初使化
ImageLoaderConfiguration configuration=new ImageLoaderConfiguration.Builder(this)
.memoryCacheExtraOptions(320, 450) // default = device screen dimensions 内存缓存文件的最大长宽
.diskCacheExtraOptions(480, 800, null) // 本地缓存的详细信息(缓存的最大长宽),最好不要设置这个
.threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级
.tasksProcessingOrder(QueueProcessingType.FIFO) // default
.denyCacheImageMultipleSizesInMemory()
.memoryCache(new LruMemoryCache(10 * 1024 * 1024)) //可以通过自己的内存缓存实现
.memoryCacheSize(2 * 1024 * 1024) // 内存缓存的最大值
.memoryCacheSizePercentage(13) // default
.diskCache(new UnlimitedDiscCache(cacheDir)) // 磁盘缓存 --default 可以自定义缓存路径
.diskCacheSize(20 * 1024 * 1024) // 50 Mb sd卡(本地)缓存的最大值
.diskCacheFileCount(100) // 可以缓存的文件数量
// default为使用HASHCODE对UIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密
.diskCacheFileNameGenerator(new HashCodeFileNameGenerator())
.imageDownloader(new BaseImageDownloader(this)) // default
.defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
.writeDebugLogs() // 打印debug log
.build();
ImageLoader.getInstance().init(configuration);
}
}
//关于布局由于要展示GridVie,因此要自定义GridView
//清单文件中要添加的权限
android:name=”.MyApplication”>
<uses-permission
android:name=”android.permission.INTERNET”></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>