我有一个数据存储两个片段和适配器,主要思路是:
onResume()
要求新数据REST_UPDATE_ITEMS
发生了什么:我打开片段1 - 没关系,上传新数据,创建新适配器并添加到RecyclerView
,我看到列表中的项目
当我转到片段2然后返回片段1时 - 上传新数据并且片段1捕获新消息,但列表为空
所以:这是捕获消息的方法
case REST_UPDATE_ITEMS: {
if (adapter == null) {
adapter = new MyAdapter(getActivity(), DataStorage.getInstance().getItems());
recyclerView.setAdapter(adapter);
} else {
adapter.swap(DataStorage.getInstance().getItems());
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
adapter.notifyDataSetChanged();
}
});
}
break;
}
调用notifyDataSetChanged()
时没有任何反应,只是空列表,但如果我每次只创建新的适配器
case REST_UPDATE_ITEMS: {
adapter = new MyAdapter(getActivity(), DataStorage.getInstance().getItems());
recyclerView.setAdapter(adapter);
break;
}
它每次都可以工作和更新数据,但它会闪烁!每次我看到这个恼人的眨眼。
我想要平滑的数据替换,或者每次打开片段时都不是空列表:旧数据 - >一些奇特的效果 - >新数据
但每当我打开片段时:空 - >眨眼甚至花哨的效果 - >一些数据
这是来自适配器的交换方法:
public void swap(ArrayList<Items> items){
this.items.clear();
this.items.addAll(items);
}
活动开始时创建的片段,然后只是
getFragmentManager().beginTransaction().add(R.id.frame_layout,fragment2).commit();
打开片段2和
getFragmentManager().beginTransaction().replace(R.id.frame_layout, fragment1).commit();
返回片段1
答案 0 :(得分:0)
case REST_UPDATE: {
if (adapter == null || recyclerView.getAdapter() == null) {
adapter = new adapter(getActivity(), DataStorage.getInstance().getItems());
recyclerView.setAdapter(adapter);
} else {
adapter.swap(DataStorage.getInstance().getItems());
}
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
adapter.notifyDataSetChanged();
}
});
break;
}
现在它正在工作,我仍然不明白,有人可以解释发生了什么吗?