Tar*_*hra 2 android android-recyclerview
当 RecyclerView 中有异构视图时,它如何处理回收?例如,在下面的代码中,我们创建了 3 种不同类型的视图以在回收器视图中使用。 现在,在这些视图膨胀之后,recyclerView 如何知道不要将这些视图用于位置 1 和 2 的其余项目?
private class CustomAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int TYPE_1 = 1;
private static final int TYPE_2 = 2;
private static final int TYPE_3 = 3;
// more types...
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case TYPE_1: inflate view_type_1
break;
case TYPE_2: inflate view_type_2
break;
case TYPE_3: inflate view_type_3
break;
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
switch (getItemViewType(position)) {
case TYPE_1:
break;
case TYPE_2:
break;
case TYPE_3:
break;
}
}
@Override
public int getItemViewType(int position) {
if(position == 1) {
return TYPE_1;
} else if(position == 2) {
return TYPE_2;
} else
return TYPE_3
}
}
Run Code Online (Sandbox Code Playgroud)
RecyclerView 基本上保留了多个 View 对象池,每个池对应 getItemViewType 返回的每个值。当它需要新项目的视图时,它首先调用 getItemViewType。然后,它进入该结果的适当池(如果不存在,则创建一个新池)并从中获取视图。它会记住屏幕上每个视图的类型。当视图循环离开屏幕时,它会返回到正确的池中。
| 归档时间: |
|
| 查看次数: |
1915 次 |
| 最近记录: |