在使用RecyclerView时,notifydatasetchanged调用onCreateViewHolder

Ama*_*yJB 23 android android-adapter notifydatasetchanged android-recyclerview

我想使用切换来在两个不同的视图之间切换,但使用相同的视图RecyclerView.基本上,一旦你切换,我想要RecyclerView适配器调用,onCreateViewHolder()但这次它将使用不同的布局项目文件.

是否notifydatasetchanged()导致适配器重建?或者还有另一种方式吗?

mar*_*mor 25

我需要View在我的上面有两种类型RecyclerView Adapter,一种用于"常规"模式,一种用于多选模式.

因此,您可以覆盖getItemViewType以强制适配器调用您onCreateViewHolder的所有视图.

将其添加到Adapter代码中:

public void setActionMode(ActionMode actionMode) {
    this.actionMode = actionMode;
    notifyDataSetChanged();
}

@Override
public int getItemViewType(int position) {
    return (actionMode == null ? 0 : 1);
}
Run Code Online (Sandbox Code Playgroud)

将此添加到ViewHolder:

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view;
    if (viewType == 0) {
        view = inflater.inflate(R.layout.layout_1, parent, false);
    } else {
        view = inflater.inflate(R.layout.layout_2, parent, false);
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

由于在a中返回不同ViewType的内容ActionMode,因此适配器被强制丢弃所有创建的视图,并再次重新创建所有内容.


And*_*per 10

notifyDataSetChanged()电话onBindViewHolder()中的情况下,RecyclerView