为什么Fragment onResume()没有正确地使用RecyclerView?

时间:2016-10-15 07:18:59

标签: android android-recyclerview notifydatasetchanged

在我的应用程序中我使用AlarmManager安排下载任务当下载时间从警报接收器服务i下载文件并从自定义对象的ArrayList中删除然后使用sharedpref保存它并在此启动后如果它已经像这样运行

ListViewBase

如果活动正在运行if (mIsInForegroundMode == true) { Intent intent1 = new Intent(this, DownloadingActivity.class); intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent1); } onResume()将被调用,我将获取保存列表并更新

Fragment

现在当@Override public void onResume() { super.onResume(); getDestroyedData(); adapter.notifyDataSetChanged(); } public void getDestroyedData() { String getPendingDownloadsList = preferences.getString("plist", ""); Type type2 = new TypeToken<List<DownloadingActivity.scheduleListType>>(){}.getType(); if (!getPendingDownloadsList.equals("")) { pending=gson.fromJson(getPendingDownloadsList, type2); } } 片段运行时,我成功获得了列表数据,但是当调用onResume时,数据在RecyclerView上更新但是它没有显示正确的值但是当我重新启动活动时adapter.notifyDataSetChanged();显示正确的值。我认为RecyclerView无法正常工作。

这也是我在onCreate()

中设置适配器的代码
adapter.notifyDataSetChanged();

更新
这是我的适配器

adapter = new PendingAdapter(pending, this.getActivity());
    recyclerView.setAdapter(adapter);
    recyclerView.setLayoutManager(new LinearLayoutManager(this.getActivity()));
    recyclerView.addItemDecoration(new SimpleDividerItemDecoration(this.getActivity()));  

2 个答案:

答案 0 :(得分:0)

确保传递给适配器的列表引用已更新。 每次创建一个新列表都是我的问题。 例如

ArrayList<String> myList = new ArrayList<String>();
MyAdapter adapter = new MyAdapter(myList);
myList = GetaNewList(); // Cause of error
adapter.notifyDataSetChanged(); 

相反,我传递了对我的列表的引用并更新了现有列表。

GetUpdatedList(myList);

在函数内部 -

GetUpdatedList(ArrayList<String> myList)
{
  myList.Append("foo");
}

答案 1 :(得分:0)

似乎pending是一个列表。然后你不应该重新分配这个列表因为你在这里新的指针和适配器仍将指向旧的。你应该清除列表然后添加项目。 像这样:

pending.clear();
pending.addAll(gson.fromJson(getPendingDownloadsList, type2));