丶Smallning 2017-07-18 14:18 采纳率: 25%
浏览 1258
已采纳

求教Android中RecyclerView中的ViewHolder的一些问题

求教Android中RecyclerView中的ViewHolder的一些问题
网上的适配器的代码都是这么写的

 public class NewAdapter extends RecyclerView.Adapter <NewAdapter.ViewHolder> {

    private List<String> data;
    static class ViewHolder extends RecyclerView.ViewHolder {
        Button number;
        Button name;

        public ViewHolder(View view) {
            super(view);
            number=view.findViewById(R.id.text1);
            name=view.findViewById(R.id.text2);
        }
    }

    public NewAdapter(List<String> data) {
        this.data=data;
    }

    @Override
    public    ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View  view= LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler,parent,false);
        ViewHolder holder=new ViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        String name=data.get(position);
        holder.number.setText(String.valueOf(position));
        holder.name.setText(name);
    }

    @Override
    public int getItemCount() {
        return data.size();
    }
}
   然后ViewHolder有点搞不明白,很多人都说ViewHolder可以节省findViewByID的使用,提高性能。但是每次滚动显示一个新Item的时候不都会调用onCreateViewHolder方法吗?这样不还是需要每次都调用findViewById,这样怎么就提升性能?
   还有想求教一下,显示一个Item的顺序是 先调用onCreateViewHolder,得到新的ViewHolder,然后将ViewHolder作为参数调用onBindViewHolder,来将其中绑定的实例置上数据吗?
  • 写回答

2条回答 默认 最新

  • huohao-nicole 2017-07-19 01:40
    关注

    其实在Recycleview中已经将viewholder和复用(根据Recycleview的中文意思就明白了)进行了封装,你如果看listview的adapter的写法中就会很容易的看到,我们是通过复用每个item的布局来减少findviewbyId的操作的(简单说就是如果你一屏显示10个item,当你向上滑动的时候第11个完全进入,第一个完全滑出屏幕,然后12个进入就会复用第一个item而不是重新创建,也就是一共创建11个item中的控件其他都使用setTag和getTag进行复用,可以打log自己证实。再listview中需要自己写,而Recycleview已经进行了封装了),当listview或者Recycleview中item的数量越多时这个复用的思想就越重要,这就是提升性能的原因。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥15 clion的参数提示怎么关闭
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀