gpt4 book ai didi

java - notifyDataSetChanged 不适用于 fragment

转载 作者:太空宇宙 更新时间:2023-11-04 12:32:20 24 4
gpt4 key购买 nike

我有一个数据存储两个 fragment 和适配器,主要思想是:

  1. fragment 1 onResume() 请求新数据
  2. 数据已加载并添加到数据存储
  3. 广播发送消息REST_UPDATE_ITEMS
  4. fragment 1 捕获该消息并更新适配器中的项目

发生了什么事:我打开 fragment 1 - 没问题,新数据已上传,新适配器已创建并添加到 RecyclerView 中,我看到列表中的项目

当我转到 fragment 2,然后返回 fragment 1 - 新数据已上传, fragment 1 捕获新消息,但列表为空

so:这是捕获消息的方法

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;
}

它每次都能工作并更新数据,但它会闪烁!每次我看到这种烦人的眨眼。

我想要平滑的数据替换,或者只是每次打开 fragment 时都不是空列表:旧数据 -> 一些奇特的效果 -> 新数据

但是每次我打开 fragment 时:空 -> 闪烁甚至奇特效果 -> 一些数据

这是适配器的交换方法:

public void swap(ArrayList<Items> items){
this.items.clear();
this.items.addAll(items);
}

Activity 开始时创建的 fragment ,然后就

getFragmentManager().beginTransaction().add(R.id.frame_layout,fragment2).commit();

打开 fragment 2 和

getFragmentManager().beginTransaction().replace(R.id.frame_layout, fragment1).commit();

返回 fragment 1

最佳答案

好吧,这很奇怪,但我找到了解决方案在我的布局中,RecyclerView 是 ScrollView 的子级 - 我删除了 ScrollView 并更改了更新方法,如下所示:

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;
}

现在它可以工作了,我仍然不明白,有人可以解释一下发生了什么吗?

关于java - notifyDataSetChanged 不适用于 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37725315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com