上拉 下拉 多条目 的一些简单代码

本文介绍了一个基于Android的列表视图实现,包括上拉加载更多和下拉刷新功能。通过调整页面变量,实现不同状态下的数据请求,并使用自定义适配器处理多类型布局。同时,详细展示了如何加载Banner和新闻数据,以及如何在适配器中更新和加载数据。

Activity中的代码:
判断是上拉还是加载
主要是通过page当前的一个页数来判断

//页数
        mpage=1;
        xListView = findViewById(R.id.xlistview);
        //支持刷新
        xListView.setPullRefreshEnable(true);
        //支持加载
        xListView.setPullLoadEnable(true);
        mybase=new Mybase(this);
        xListView.setAdapter(mybase);
        xListView.setXListViewListener(new XListView.IXListViewListener() {
            @Override
            public void onRefresh() {//刷新
                mpage=1;
                jiazai();
            }

            @Override
            public void onLoadMore() {//加载
                mpage++;
                jiazai();
            }
        });
        jiazai();
    }
    public void jiazai(){
        if(mpage==1){
            huoqubanner();
            huoqunews();
        }else{
            huoqunews();
        }
    }
    //加载banner
    public void huoqubanner(){
        NetUtil.yibu(banner, BannerBean.class, new NetUtil.CallBack<BannerBean>() {
            @Override
            public void getdata(BannerBean o) {
                if (mpage==1){
                    mybase.setBlist(o.getData());
                }
            }
        });
    }
    public void huoqunews(){
        NetUtil.yibu(news, NewsBean.class, new NetUtil.CallBack<NewsBean>() {
            @Override
            public void getdata(NewsBean o) {
                if (mpage==1){
                    mybase.setNlist(o.getData());
                }else{
                    mybase.addNlist(o.getData());
                }
                //停止刷新加载
                xListView.stopRefresh();
                xListView.stopLoadMore();
                //如果加载的新闻少于十条就不加载
                if (o.getData().size()<10){
                    xListView.setPullLoadEnable(false);
                }
            }
        });
    }

适配器中的代码:
主要是添加更新和加载的方法 进行更新适配器
多条目通过返回的type来判断布局的不同加载情况

private List<BannerBean.Data> blist;
    private List<NewsBean.Result> nlist;
    private Context context;
    private final int ITEM_COUNT=2;
    private final int ITEM_BANNER=0;
    private final int ITEM_NEWS=1;
    public Mybase(Context context) {
        this.context = context;
        blist=new ArrayList<>();
        nlist=new ArrayList<>();
    }
    //更新banner

    public void setBlist(List<BannerBean.Data> list) {
        blist.clear();
        if (list!=null){
            blist.addAll(list);
        }
        notifyDataSetChanged();
    }
    //更新新闻数据
    public void setNlist(List<NewsBean.Result> list) {
        nlist.clear();
        if (list!=null){
            nlist.addAll(list);
        }
        notifyDataSetChanged();;
    }
    //加载更多的新闻数据
    public void addNlist(List<NewsBean.Result> list) {
        if (list!=null){
            nlist.addAll(list);
        }
        notifyDataSetChanged();
    }
    //判断是否有banner
    public boolean hasBanner(){
        return blist.size()>0;
    }
    @Override
    public int getCount() {
        return hasBanner()?nlist.size()+1:nlist.size();
    }

    @Override
    public NewsBean.Result getItem(int position) {
        return nlist.get(hasBanner()?position-1:position);
    }

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

    @Override
    public int getViewTypeCount() {
        return ITEM_COUNT;
    }

    @Override
    public int getItemViewType(int position) {
        return position==0&&hasBanner()?ITEM_BANNER:ITEM_NEWS;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (getItemViewType(position)==ITEM_BANNER){
            BannerViewHolder holder;
            if (convertView==null){
                convertView=LayoutInflater.from(context).inflate(R.layout.item_banner,parent,false);
                holder=new BannerViewHolder(convertView);
            }else{
                holder= (BannerViewHolder) convertView.getTag();
            }
            holder.getdata(context,blist);
        }else{
            NewsViewHolder holder;
            if (convertView==null){
                convertView=LayoutInflater.from(context).inflate(R.layout.item_news,parent,false);
                holder=new NewsViewHolder(convertView);
            }else{
                holder= (NewsViewHolder) convertView.getTag();
            }
            holder.getdata(getItem(position));
        }
        return convertView;
    }
    class BannerViewHolder{
        private ViewPager viewPager;
        @SuppressLint("HandlerLeak")
        private android.os.Handler handler=new Handler(){
            @Override
            public void handleMessage(Message msg) {
                viewPager.setCurrentItem(viewPager.getCurrentItem()+1);
                handler.sendEmptyMessageDelayed(0,2000);
            }
        };
        public BannerViewHolder(View convertView) {
            viewPager=convertView.findViewById(R.id.viewpager);
            convertView.setTag(this);
        }

        public void getdata(Context context, List<BannerBean.Data> blist) {
            //先取消掉切换任务
            handler.removeCallbacksAndMessages(null);
            viewPager.setAdapter(new Mypage(blist,context));
            //默认位置
            viewPager.setCurrentItem(viewPager.getAdapter().getCount()/2);
            //开始轮播
            handler.sendEmptyMessageDelayed(0,2000);
        }
    }
    class NewsViewHolder{
        private TextView title;
        private TextView message;
        private ImageView image;

        public NewsViewHolder(View convertView) {
            title=convertView.findViewById(R.id.title);
            message=convertView.findViewById(R.id.message);
            image=convertView.findViewById(R.id.image);
            convertView.setTag(this);
        }

        public void getdata(NewsBean.Result item) {
            title.setText(item.getNews_title());
            message.setText(item.getNews_summary());
            ImageLoader.getInstance().displayImage(item.getPic_url(),image);
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值