ListView与RecyclerView的区别

  1. ListView
    1.1 ListView的Adapter继承的是BaseAdapter;
    1.2 ListView的ViewHolder不是强制要写的, 只是不写的话导致的后果就是如果数据一多,可能会导致OOM或者界面卡顿;
    1.3 ListView的分割线直接在布局中设置 divider
    1.4 ListView的点击事件直接是setOnItemClickListener

  2. RecyclerView
    2.1 RecyclerView的Adapter继承的是RecyclerView.Adapter
    2.2 RecyclerView的ViewHolder是必须要写的,是强制的,如果不写的话,就不能重写RecyclerView.Adapter中的3个方法 getItemCount()、onCreateViewHolder()、onBindViewHolder()分别表示 总共显示多少条目、创建ViewHolder、绑定数据;
    2.3 RecyclerView在setAdapter之前一定要设置显示的样式,否则数据不能显示
    new LinearLayoutManager(this) ; -> 表示ListView
    new GridLayoutManager(this , 3) ; -> 表示GridView,3表示1列显示的个数
    new StraggeredGridLayoutManager() ;
    2.4 RecyclerView不支持直接在布局中添加分割线
    2.5 RecyclerView不支持点击事件,只能用回调接口来设置点击事件
    2.5.1 在adapter中写

 

// 利用接口 -> 给RecyclerView设置点击事件
    private ItemClickListener mItemClickListener ;
    public interface ItemClickListener{
        public void onItemClick(int position) ;
    }
    public void setOnItemClickListener(ItemClickListener itemClickListener){
        this.mItemClickListener = itemClickListener ;

    }

2.5.2 在绑定数据的onBindViewHolder中给所有控件设置完点击事件后判断mItemClickListener不为空的话,设置点击事件,利用回调接口来设置点击事件

 

@Override
    public void onBindViewHolder(CategoryListAdapter.ViewHolder holder, final int position) {
        // 在这里取出 Activity中请求接口的list集合数据,然后给 item 中 每个子控件去设置数据
        ChannelListResult.DataBean.
                CategoriesBean.CategoryListBean item = mData.get(position) ;
        Glide.with(mContext).load(item.getIcon_url()).into(holder.channel_icon) ;


        // 名字
        holder.channel_text.setText(item.getName());
        // 内容
        holder.channel_topic.setText(item.getIntro());

        // 显示数据  因为最下边数据是:左边灰色,右边粉红色,所以这里使用html
        String str = item.getSubscribe_count() + " 订阅 | " +
                "总帖数 <font color='#FF678D'>" + item.getTotal_updates() + "</font>";
        holder.channel_update_info.setText(Html.fromHtml(str));


        // 点击事件一般都写在绑定数据这里,当然写到上边的创建布局时候也是可以的
        if (mItemClickListener != null){
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // 这里利用回调来给RecyclerView设置点击事件
                    mItemClickListener.onItemClick(position);
                }
            });
        }

    }



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值