美文网首页Android 理论面试题
ListView与RecyclerView的区别

ListView与RecyclerView的区别

作者: 世道无情 | 来源:发表于2018-06-06 14:46 被阅读2972次
  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);
                }
            });
        }

    }

相关文章

网友评论

    本文标题:ListView与RecyclerView的区别

    本文链接:https://www.haomeiwen.com/subject/jqrtfftx.html