采用以下代码:
@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()
不起作用,因为它只是没有更改,只有一些外部设置才更改。
答案 0 :(得分:2)
您尝试过notifyDatasetChanged()
吗?根据{{3}}:
此事件未指定数据集已更改的内容,从而迫使任何观察者假定所有现有项目和结构可能不再有效。 LayoutManager将被迫完全重新绑定并重新布局所有可见视图。
您将进行更改以在prop2
中隐藏/显示onBindViewHolder()
。这应该适用于简单的更改。如果外部更改导致布局更改更加复杂,例如使用整个新的View Holder布局,则可能需要采用其他方法。