在XlistView中插入ViewPager作为头布局

ViewPager作为头布局加入XilistView中实现上方自动无限轮播,且可以下拉刷新及上拉加载。

代码如下:

public class MainActivity extends AppCompatActivity implements XListView.IXListViewListener {

    private XListView xlv;
    private View view;
    private ViewPager vp;
    private String str;
    private MyAdapter adapter;
    private List<Bean.DataBean.AdlistBean> list;
    private List<String> xl;
    private List<Bean.DataBean.HotcategoryBean> xlist;
    private int resh=0;
    private int load=0;
    //Handler
    private Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            int num=msg.what;
            switch (num){
                //自动轮播
                case 0:
                    int i=vp.getCurrentItem();
                    i++;
                    vp.setCurrentItem(i);
                    sendmsg();
                    break;
            }
            //刷新xlistView
            adapter.notifyDataSetChanged();
            close();
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化组件
        xlv= (XListView) findViewById(R.id.xlv);
        //获取头布局文件
        view=View.inflate(this,R.layout.header_item,null);
        //初始化头布局中的组件
        vp= (ViewPager) view.findViewById(R.id.vp);
        //调用获取数据的方法
        init();
        //创建xlistView使用的适配器
        adapter=new MyAdapter();
        //允许上拉加载和下拉刷新
        xlv.setPullLoadEnable(true);
        xlv.setPullRefreshEnable(true);
        
        xlv.setXListViewListener(this);
        //搭配适配器
        xlv.setAdapter(adapter);
        //添加头布局
        xlv.addHeaderView(view);
        //自动轮播
        sendmsg();
    }
    private void sendmsg(){
        //延时两秒发送handler
        handler.sendEmptyMessageDelayed(0,2000);
    }
    //关闭方法
    public void close(){
        xlv.stopLoadMore();
        xlv.stopRefresh();
    }
    //重写刷新方法
    @Override
    public void onRefresh() {
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                xl.add(0,"刷新"+resh);
                resh++;
            }
        },2000);
    }
    //重写加载方法
    @Override
    public void onLoadMore() {
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                xl.add("加载更多"+load);
                load++;
            }
        },2000);
    }
    //获取数据的方法
    private void init(){
        //初始化list集合
        list=new ArrayList<>();
        xlist=new ArrayList<>();
        xl=new ArrayList<>();
        //判断集合是否为空
        if(xl!=null){
            xl.clear();
        }
        //创建一个线程请求数据
        new Thread(){
            @Override
            public void run() {
                //路径
                String path="http://www.meirixue.com/api.php?c=index&a=index";
                try {
                    //开始请求
                    URL url=new URL(path);
                    HttpURLConnection connection= (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("GET");
                    connection.setReadTimeout(3000);
                    connection.setConnectTimeout(3000);
                    connection.setDoInput(true);
                    int code=connection.getResponseCode();
                    if(code==200){
                        InputStream is=connection.getInputStream();
                        ByteArrayOutputStream baos=new ByteArrayOutputStream();
                        byte[] buffer=new byte[1024];
                        int len=-1;
                        while((len=is.read(buffer))!=-1){
                            baos.write(buffer,0,len);
                        }
                        str=baos.toString();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }//处理数据
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        //解析json字符串
                        Gson gson=new Gson();
                        Bean bean=gson.fromJson(str,Bean.class);
                        //分别放入各自的集合
                        list=bean.getData().getAdlist();
                        xlist=bean.getData().getHotcategory();
                        MyViewAdapter viewAdapter=new MyViewAdapter(list,MainActivity.this);
                        vp.setAdapter(viewAdapter);
                        for(int i=0;i<xlist.size();i++){
                            xl.add(xlist.get(i).getCname());
                        }
                    }
                });
            }
        }.start();
    }
    //xlistView的适配器
    class MyAdapter extends BaseAdapter{
        @Override
        public int getCount() {
            return xl.size();
        }
        @Override
        public Object getItem(int position) {
            return xl.get(position);
        }
        @Override
        public long getItemId(int position) {
            return position;
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            TextView tv=new TextView(MainActivity.this);
            tv.setText(xl.get(position));
            return tv;
        }
    }
}
/**
 * Created by admin on 2017/08/22/022.
 * viewpager的适配器
 */
public class MyViewAdapter extends PagerAdapter{
    private List<Bean.DataBean.AdlistBean> list;
    private Context context;
    public MyViewAdapter(List<Bean.DataBean.AdlistBean> list,Context context){
        this.list=list;
        this.context=context;
    }
    @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 iv=new ImageView(context);
        ImageLoader.getInstance().displayImage(list.get(position%list.size()).getImg(),iv);
        container.addView(iv);
        return iv;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
    }
}

 
 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值