Rerender recyclerview

时间:2018-07-01 00:37:01

标签: android android-recyclerview

采用以下代码:

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
    // get the list item
    MyListItemObject myListItemObject = getObject(i);

    //set some values
    viewHolder.prop1.setText(myListItemObject.prop1);
    viewHolder.prop2.setText(myListItemObject.prop2);

    //We got some setting from another object.
    if(externalObject.showProp2){
        viewHolder.prop2.setVisibility(View.VISIBLE);
    }else{
        viewHolder.prop2.setVisibility(View.GONE);
    }
}

通过一些外部设置值,我们决定显示或隐藏prop2,现在假定此值从true变为false,我该如何重新呈现列表。 notifyDatasetChanged()不起作用,因为它只是没有更改,只有一些外部设置才更改。

1 个答案:

答案 0 :(得分:2)

您尝试过notifyDatasetChanged()吗?根据{{​​3}}:

  

此事件未指定数据集已更改的内容,从而迫使任何观察者假定所有现有项目和结构可能不再有效。 LayoutManager将被迫完全重新绑定并重新布局所有可见视图。

您将进行更改以在prop2中隐藏/显示onBindViewHolder()。这应该适用于简单的更改。如果外部更改导致布局更改更加复杂,例如使用整个新的View Holder布局,则可能需要采用其他方法。