PullToRefreshListView

3步骤第一步 布局xml
<com.handmark.pulltorefresh.library.PullToRefreshListView
        android:id="@+id/pull_refresh_list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:cacheColorHint="#00000000"    //1去除拖动背景色,否则拖动会显示黑色背景
        android:divider="#19000000"
        android:dividerHeight="4dp"
        android:fadingEdge="none"   //2去除上下边黑色阴影
        android:fastScrollEnabled="false"   //3快速滑动图标
        android:footerDividersEnabled="false"  //4页脚分割线
        android:headerDividersEnabled="false"
      android:smoothScrollbar="true" />

3步骤第二步 代码
 public View initView() {
        //轮播图+ListView
//        textView = new TextView(mCtx);
//        return textView;
        View viewTop = View.inflate(mCtx, R.layout.layout_new_tab_top, null);
        ButterKnife.bind(this, viewTop);


        View viewBottom = View.inflate(mCtx, R.layout.layout_new_tab_bottom, null);
        //获取布局文件中的带下拉刷新上拉加载的控件
        mPullRefreshList = (PullToRefreshListView) viewBottom.findViewById(R.id.pull_refresh_list);
        //获取真实的listView
        lvNews = mPullRefreshList.getRefreshableView();
        //给ListView添加一个头
        lvNews.addHeaderView(viewTop);


        //告知pullToRefreshListView支持下拉和上拉2中行为
        mPullRefreshList.setMode(PullToRefreshBase.Mode.BOTH);
        //监听下拉和上拉,下拉和上拉都必须有效
        mPullRefreshList.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<ListView>() {
            @Override
            public void onRefresh(PullToRefreshBase<ListView> refreshView) {
                if(refreshView.getCurrentMode() == PullToRefreshBase.Mode.PULL_FROM_START){
                    //下拉行为,触发下拉刷新
                    Log.i("","触发下拉刷新................");
                    //访问网络,url地址原地址
                    //刷新,将原有页面的数据清理掉,展示最新的数据  true 代表本次请求是刷新
                    mPullRefreshList.onRefreshComplete();
                }else{
                    //上拉行为,触发加载更多
                    Log.i("","触发上拉加载................");
                    //访问网络,url地址more字段提供出来的链接地址
                    //加载,保留原有数据,将下一页的数据放在原有数据后面  false 代表本次请求是加载
                   mPullRefreshList.onRefreshComplete();
                }
            }
        });
        //让ListView添加单条目点击事件
        lvNews.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                News news = newsList.get(position - 2);
                //每一条新闻都有一个唯一性id,将已经读过的新闻id以如下的形式存储在sp中   "#35311#35312#35313#35314........#35315"
                //当下一次加载数据的时候,发现加载的数据中id和sp中的某一个id有重复,则认为此新闻是已读新闻,否则为未读新闻


                //之前读过新闻ids字符串 ,形式"#35311#35312#35313#35314........#35315"
                String ids = SPUtil.getString(mCtx, Constant.IDS, "");
                if (!news.isRead){
                    //将未读修改为已读
                    news.isRead = true;
                    //将已读id存储在sp中
                    SPUtil.saveString(mCtx,Constant.IDS,ids+"#"+news.id);


                    //刷新listView页面方法
                    myAdapter.notifyDataSetChanged();
                }
                Intent intent = new Intent(mCtx, NewDetailActivity.class);
                intent.putExtra("news",news);
                mCtx.startActivity(intent);
            }
        });
        return viewBottom;
    }
3步骤第三步 adpter
    class MyAdapter extends BaseAdapter {
        private static final int ITEM_PIC = 0;
        private static final int ITEM_PIC_TEXT = 1;

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

        @Override
        public News getItem(int position) {
            return newsList.get(position);
        }

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

        @Override
        public int getViewTypeCount() {
            //条目类型总数
            return 2;
        }

        @Override
        public int getItemViewType(int position) {
            //position位置的条目类型是什么
            String type = newsList.get(position).type;
            if (type.equals("1")) {
                //指定3张图片类型状态码
                return ITEM_PIC;
            } else {
                //指定1张图片+文字状态码
                return ITEM_PIC_TEXT;
            }
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if (getItemViewType(position) == ITEM_PIC_TEXT) {
                //构建图片+文本布局
                PicTextViewHolder picTextViewHolder = null;
                if (convertView == null) {
                    convertView = View.inflate(mCtx, R.layout.item_pic_text, null);
                    picTextViewHolder = new PicTextViewHolder(convertView);
                    convertView.setTag(picTextViewHolder);
                } else {
                    picTextViewHolder = (PicTextViewHolder) convertView.getTag();
                }
                News item = getItem(position);
                //设置新闻标题
                picTextViewHolder.tvNewTitle.setText(item.title);
                picTextViewHolder.tvPubTime.setText(item.pubdate);
                //新闻图片
                Glide.with(mCtx).load(item.listimage).into(picTextViewHolder.ivNews);

                if(item.isRead){
                    //显示文字要为红色
                    picTextViewHolder.tvNewTitle.setTextColor(Color.RED);
                    picTextViewHolder.tvPubTime.setTextColor(Color.RED);
                }else{
                    //显示文字要为黑色
                    picTextViewHolder.tvNewTitle.setTextColor(Color.BLACK);
                    picTextViewHolder.tvPubTime.setTextColor(Color.BLACK);
                }
                return convertView;
            } else {
                //构建纯图片布局
                PicViewHolder picViewHolder = null;
                if (convertView == null) {
                    convertView = View.inflate(mCtx, R.layout.item_pic, null);
                    picViewHolder = new PicViewHolder(convertView);

                    convertView.setTag(picViewHolder);
                }else{
                    picViewHolder = (PicViewHolder) convertView.getTag();
                }
                News item = getItem(position);
                //设置时间
                picViewHolder.tvPubTime.setText(item.pubdate);
                //设置3张图片
                Glide.with(mCtx).load(item.listimage).into(picViewHolder.ivNew1);
                Glide.with(mCtx).load(item.listimage1).into(picViewHolder.ivNew2);
                Glide.with(mCtx).load(item.listimage2).into(picViewHolder.ivNew3);

                if(item.isRead){
                    //显示文字要为红色
                    picViewHolder.tvPubTime.setTextColor(Color.RED);
                }else{
                    //显示文字要为黑色
                    picViewHolder.tvPubTime.setTextColor(Color.BLACK);
                }

                return convertView;
            }

        }
    }
    static class PicViewHolder {
        @BindView(R.id.iv_new1)
        ImageView ivNew1;
        @BindView(R.id.iv_new2)
        ImageView ivNew2;
        @BindView(R.id.iv_new3)
        ImageView ivNew3;
        @BindView(R.id.tv_pub_time)
        TextView tvPubTime;

        PicViewHolder(View view) {
            ButterKnife.bind(this, view);
        }
    }

    static class PicTextViewHolder {
        @BindView(R.id.iv_news)
        ImageView ivNews;
        @BindView(R.id.tv_new_title)
        TextView tvNewTitle;
        @BindView(R.id.tv_pub_time)
        TextView tvPubTime;

        PicTextViewHolder(View view) {
            ButterKnife.bind(this, view);
        }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值