并且仍然无法让我的适配器从新数据集中进行更新。
我在调试模式下的代码如下:
public class PetInformationActivity extends AppCompatActivity
implements ConfirmDialogFragment.ConfirmDialogListener, MedicalInformationFragment.OnFragmentInteractionListener{
private static List<Assignment> listAssignments = new ArrayList<>();
private static AssignmentsAdapter mAdapter;
private static PetInformationViewModel sPetInformationViewModel;
.
.
.
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
.
.
.
/**
* get the providers' IDs assigned to the pet: fillAssignmentsArray()
*/
listAssignments = sPetInformationViewModel.getAssignedProviders(petId);
此时调试中:
mAdapter = null
listAssignments = (ArrayList@5411) size = 0
Log.d(TAG, "listAssignments has " + listAssignments.size() + " Assignment objects in it");
Log.d(TAG, "listAssignments is: " + listAssignments);
此时调试中:
mAdapter = null
listAssignments = (ArrayList@5461) size = 1
0 = (Assignment@5496)"Assignment{mType='Veterinarian', mProviderName='red vet'}"
mAdapter = new AssignmentsAdapter(this, listAssignments);
此时调试中:
mAdapter = (AssignmentsAdapter@5499)
listAssignments = (ArrayList@5461) size = 1
0 = (Assignment@5496)"Assignment{mType='Veterinarian', mProviderName='red vet'}"
mRecyclerView.setAdapter(mAdapter);
.
.
.
}
public void onResume(){
super.onResume();
Log.d(TAG, "Entered: onResume");
listAssignments.clear();
Log.d(TAG, "listAssignments is: " + listAssignments);
此时屏幕是空白的,它应该显示在 Assignment@5607 中显示的文本。似乎 notififyDataSetChanged() 通知 mAdapter 将 onCreate (ArrayList@5461) 中显示的文本更改为清除 onResume (ArrayList@5461),但没有通知 onResume (ArrayList@5594) 中对数据的新调用。
这似乎表明当 mAdapter 初始化为 listAssignments 时,它被设置为使用地址 @5461 的 ArrayList。当在 onResume 中调用新数据时,在 a) 使用后退按钮返回和 (b) 当此 Activity 首次启动时,会在不同的地址创建一个新的 ArrayList。
因此,我似乎没有正确地合并我的 ArrayList,因为对 listAssignments 的所有更新都会产生一个全新的 ArrayList 对象,该对象永远不会用于更新 mAdapter,它将始终更新为地址 @5461 处的初始 ArrayList。
我已经搜索了有关如何正确地将适配器绑定到 ArrayList 的信息,但我没有找到任何暗示比我所做的更多的信息。我假设 notifyDataSetChanged() 的目的是使用现有的适配器进行更新,这样现有的适配器就不必被销毁,并且在每个数据集更改时创建一个新的适配器
四季花海
扬帆大鱼
相关分类