2 回答

TA貢獻(xiàn)1811條經(jīng)驗 獲得超5個贊
好吧,我在這里跑題了,說 notifyDataSetChanged() 不適用于 ArrayList,因為在每次加載時,它的地址都會發(fā)生變化,請參閱我的原始帖子和對 pnavk 的評論以查看詳細(xì)信息。據(jù)我了解,Java 無法像 C 或 C++ 那樣通過指針固定 ArrayList 的地址,因此適配器被設(shè)置為原始 ArrayList 對象的內(nèi)存位置,因此每次都指向相同的數(shù)據(jù)即使 Java 為該 ArrayList 對象使用了新的內(nèi)存位置,或者創(chuàng)建了一個全新的同名 ArrayList 對象,也會調(diào)用 notifyDataSetChanged()。
因此,我從 ArrayList 中的新數(shù)據(jù)集更新 RecyclerView 的答案是將 onResume 中的 Adapter 重置為新的,然后將該 Adapter 重新分配給您的 RecyclerView,正如我在對 pnavk 的回復(fù)中提到的那樣:
mAdapter = new AssignmentsAdapter(this, listAssignments); mRecyclerView.setAdapter(mAdapter);

TA貢獻(xiàn)1799條經(jīng)驗 獲得超9個贊
您傳遞給 ArrayAdapter 的引用與此處分配的引用不同:
listAssignments = sPetInformationViewModel.getAssignedProviders(petId);
就 ArrayAdapter 而言,它所引用的 listAssignments 已被清除 OnResume 并且沒有任何內(nèi)容被添加回它。它對新的 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();
}
添加回答
舉報