差异回收视图:在CreateView或BindView

时间:2017-08-29 15:27:10

标签: java android android-recyclerview recycler-adapter

我正在学习android而且对此知之甚少,但显然节省资源很重要,所以我想知道设置背景颜色的做法是否明显优于另一种做法:

对我来说,在“onCreateViewHolder”的视图上设置背景颜色是有意义的,如下所示:

@Override
public WordsHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View inflatedView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.list_view_layout,parent,false);
    **inflatedView.setBackgroundResource(colorID);**
    return new WordsHolder(inflatedView);
}

而不是在“onBindViewHolder”的每一行上设置它,但据我所知,android只会在视图中包含的每个对象上设置一次颜色,因为它们被回收,可能只有10行(或者每次回收视图时它都会重置吗?)。

 @Override
public void onBindViewHolder(WordsHolder holder, int position) {
    Words word = mWordList.get(position);
    //STUFF
    **holder.row.setBackgroundResource(colorID);**
}

这两个选项都运作良好,但我应该使用哪一个?

1 个答案:

答案 0 :(得分:2)

正如@Devsil所说,onCreateViewHolder()用于常见的事情(例如,如果你的颜色是常数,应该在那里设置),onBindViewHolder()用于与行不同的事物。

原因是避免一遍又一遍地设置值(或找到View或创建某些东西)。仅调用onCreateViewHolder()来创建项目,稍后调用onBindViewHolder()来设置特定值。但是当以后项目被回收(重用)时,不需要重新创建它,只调用onBindViewHolder(),避免尽可能多的昂贵操作。