请求接口轮播(viewPager)+pullToRefreshListView(内嵌套GridView)


-------------MainActivity布局(轮播)-------------

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
    >

<android.support.v4.view.ViewPager
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:id="@+id/vp"></android.support.v4.view.ViewPager>

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/btn"
    android:text="跳转"
    android:layout_alignParentBottom="true"/>


</RelativeLayout>

---------------轮播图(请求接口)------------------

public class MainActivity extends AppCompatActivity {

    private ViewPager viewPager;
    private Handler myHandler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);

            int index=viewPager.getCurrentItem();
            index++;
            viewPager.setCurrentItem(index);

            sendEmptyMessageDelayed(0,1000);

        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        viewPager = findViewById(R.id.vp);
        Button btn=findViewById(R.id.btn);
	//设置按钮点击事件
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MainActivity.this,Main2Activity.class);
                startActivity(intent);
            }
        });

        if(NetStateUtil.isConn(this)){
            Toast.makeText(this,"有网络",Toast.LENGTH_SHORT).show();

            MyTask myTask=new MyTask(new MyTask.Icallbacks() {
                @Override
                public void updateUiByjson(String jsonstr) {
			//解析JSON串
                    Gson gson=new Gson();
                    ResultData resultData = gson.fromJson(jsonstr, ResultData.class);
                    String imgStr = resultData.getData().getImages();
                    //字符串分隔-特殊
                    String[] split = imgStr.split("\\|");

                    //设置适配器
                    viewPager.setAdapter(new MyVpAdapter(MainActivity.this,split));
		    //发延迟消息
                    myHandler.sendEmptyMessageDelayed(0,1000);

                }
            });
		//请求接口
            myTask.execute("http://120.27.23.105/product/getProductDetail?pid=1&source=android");

        }else{
		//显示设置网络的对话框
            NetStateUtil.showNoNetWorkDlg(this);
        }
    }
}
 
 
 public class MyVpAdapter extends PagerAdapter {

        private Context context;
        private String[] lists;
        private DisplayImageOptions options;

        public MyVpAdapter(Context context, String[] lists) {
            this.context = context;
            this.lists = lists;

            options=new DisplayImageOptions.Builder()
                    .cacheInMemory(true)//使用内存缓存
                    .cacheOnDisk(false)//使用磁盘缓存
                    .bitmapConfig(Bitmap.Config.RGB_565)//设置图片色彩模式
                    .imageScaleType(ImageScaleType.EXACTLY)//设置图片的缩放模式
                    .build();
        }

        @Override
        public int getCount() {
            return Integer.MAX_VALUE;
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view==object;
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {

            ImageView imageView=new ImageView(context);
            ImageLoader.getInstance().displayImage(lists[position%lists.length],imageView,options);

            //添加到viewPager            container.addView(imageView);



            //返回当前的视图对象
            return imageView;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
//        super.destroyItem(container, position, object);
            container.removeView((View)object);
        }
    }
     ----------Main2Activity布局----------

 
 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="zhanghaijiao.bawei.com.yuekao_month12.Main2Activity"
    >

<com.handmark.pulltorefresh.library.PullToRefreshListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/plv"></com.handmark.pulltorefresh.library.PullToRefreshListView>


</RelativeLayout>

 
    ---------------Main2Activity代码-------------



public class Main2Activity extends AppCompatActivity {

    private PullToRefreshListView pullToRefreshListView;
    private MyAdapter adapter;
    private List<ResultData1.DataBean> data=new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        pullToRefreshListView = findViewById(R.id.plv);

        //初使化
        initPlv();
        //请求网络数据
        requestNetData();
    }

    private void requestNetData() {
        MyTask myTask=new MyTask(new MyTask.Icallbacks() {
            @Override
            public void updateUiByjson(String jsonstr) {
                Gson gson=new Gson();
                ResultData1 resultData1 = gson.fromJson(jsonstr, ResultData1.class);

                data.clear();
                data.addAll(resultData1.getData());

                setlvAdapter();

                //关闭
                pullToRefreshListView.onRefreshComplete();

            }
        });
	//请求接口
        myTask.execute("http://120.27.23.105/product/getProductCatagory?cid=1");

    }
	//设置适配器
    public void setlvAdapter(){
        if(adapter==null){
            adapter=new MyAdapter(this,data);
            pullToRefreshListView.setAdapter(adapter);
        }else {
            adapter.notifyDataSetChanged();
        }
    }

    private void initPlv() {
	//支持上拉加载,下拉刷新
        pullToRefreshListView.setMode(PullToRefreshBase.Mode.BOTH);
	//为设置监听
        pullToRefreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) {
                //刷新数据
                requestNetData();

            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) {
                Toast.makeText(Main2Activity.this,"加载更多",Toast.LENGTH_SHORT).show();


                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        //关闭
                        pullToRefreshListView.onRefreshComplete();
                    }
                },1000);


            }
        });

        //添加条目点击事件(xlistview可以设置长按监听pullToRefreshListView没有长按监听

       /* pullToRefreshListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                data.remove(i);
                setlvAdapter();
            }
        });*/


    }
}

	------------------自定义Gridview------------------
 

public class MyGridView extends GridView {

    public MyGridView(Context context) {

        super(context);

    }

 

    public MyGridView(Context context, AttributeSet attrs) {

        super(context, attrs);

    }

 

    public MyGridView(Context context, AttributeSet attrs, int defStyleAttr) {

        super(context, attrs, defStyleAttr);

    }

 

    @Override

    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

        int newHeight=MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2,MeasureSpec.AT_MOST);

        super.onMeasure(widthMeasureSpec, newHeight);

    }

}

	
      -------------pullToRefreshListView条目布局-------------

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
    >
<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/tv"/>
<zhanghaijiao.bawei.com.yuekao_month12.MyGridView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/gv"
    android:numColumns="3"
    android:layout_below="@id/tv"></zhanghaijiao.bawei.com.yuekao_month12.MyGridView>
</RelativeLayout>
          ----------pullToRefreshListView适配器------------

public class MyAdapter extends BaseAdapter {
    private Context context;
    private List<ResultData1.DataBean> data;

    public MyAdapter(Context context, List<ResultData1.DataBean> data) {
        this.context = context;
        this.data = data;
    }

    @Override
    public int getCount() {
        return data.size();
    }

    @Override
    public Object getItem(int i) {
        return data.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        ViewHolder holder;
        if(view==null){
            holder=new ViewHolder();
            view=View.inflate(context, R.layout.item,null);
            holder.tv=view.findViewById(R.id.tv);
            holder.gv=view.findViewById(R.id.gv);
            view.setTag(holder);

        }else {
            holder= (ViewHolder) view.getTag();
        }

        holder.tv.setText(data.get(i).getName());
        //gridview设置适配器
        List<ResultData1.DataBean.ListBean> list = data.get(i).getList();
        holder.gv.setAdapter(new MyGvAdapter(context,list));

        return view;
    }
    class ViewHolder{
        TextView tv;
        GridView gv;
    }
}

	
             ----------GridView布局--------------

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">

<ImageView
    android:layout_width="80dp"
    android:layout_height="80dp"
    android:id="@+id/img"/>
<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/tv"
    android:layout_below="@id/img"/>

</RelativeLayout>
	-----------------GridView适配器-------------------
  
public class MyGvAdapter extends BaseAdapter {
    private Context context;
    private List<ResultData1.DataBean.ListBean> list;
    private DisplayImageOptions options;

    public MyGvAdapter(Context context, List<ResultData1.DataBean.ListBean> list) {
        this.context = context;
        this.list = list;
        options=new DisplayImageOptions.Builder()
                .cacheInMemory(true)//使用内存缓存
                .cacheOnDisk(false)//使用磁盘缓存
                .bitmapConfig(Bitmap.Config.RGB_565)//设置图片色彩模式
                .imageScaleType(ImageScaleType.EXACTLY)//设置图片的缩放模式
                .build();
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int i) {
        return list.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        ViewHolder holder;
        if(view==null){
            holder=new ViewHolder();
            view=View.inflate(context, R.layout.gitem,null);
            holder.tv=view.findViewById(R.id.tv);
            holder.img=view.findViewById(R.id.img);
            view.setTag(holder);

        }else {
            holder= (ViewHolder) view.getTag();
        }

        holder.tv.setText(list.get(i).getName());
        ImageLoader.getInstance().displayImage(list.get(i).getIcon(),holder.img,options);
        return view;
    }
    class ViewHolder
    {
        TextView tv;
        ImageView img;
    }

}

 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值