2 回答

TA贡献1811条经验 获得超5个赞
好吧,我在这里跑题了,说 notifyDataSetChanged() 不适用于 ArrayList,因为在每次加载时,它的地址都会发生变化,请参阅我的原始帖子和对 pnavk 的评论以查看详细信息。据我了解,Java 无法像 C 或 C++ 那样通过指针固定 ArrayList 的地址,因此适配器被设置为原始 ArrayList 对象的内存位置,因此每次都指向相同的数据即使 Java 为该 ArrayList 对象使用了新的内存位置,或者创建了一个全新的同名 ArrayList 对象,也会调用 notifyDataSetChanged()。
因此,我从 ArrayList 中的新数据集更新 RecyclerView 的答案是将 onResume 中的 Adapter 重置为新的,然后将该 Adapter 重新分配给您的 RecyclerView,正如我在对 pnavk 的回复中提到的那样:
mAdapter = new AssignmentsAdapter(this, listAssignments); mRecyclerView.setAdapter(mAdapter);

TA贡献1799条经验 获得超9个赞
您传递给 ArrayAdapter 的引用与此处分配的引用不同:
listAssignments = sPetInformationViewModel.getAssignedProviders(petId);
就 ArrayAdapter 而言,它所引用的 listAssignments 已被清除 OnResume 并且没有任何内容被添加回它。它对新的 listAssignments 参考一无所知。
尝试这样做:
public void onResume()
{
super.onResume();
Log.d(TAG, "Entered: onResume");
listAssignments.clear();
Log.d(TAG, "listAssignments is: " + listAssignments);
List<Assignment> newList = sPetInformationViewModel.getAssignedProviders(petId);
listAssignments.addAll(newList);
mAdapter.notifyDataSetChanged();
}
添加回答
举报