![](/img/trans.png)
[英]How do I dynamically add and delete fragments with viewpager2 and fragmentstateadapter?
[英]How to update Fragments in Tablayout? (Viewpager2, FragmentStateAdapter)
我使用来自 arraylist 的数据创建初始内容(我从 firebase 获取)数据每 15 分钟更改一次,我如何调用娱乐或如何将文本从 mainactivity 设置为片段/如何更新文本视图碎片(其中任何一个都可以)
我读过很多人用 getItem 解决这个问题,但请记住我有 FragmentStateAdapter 我没有这些方法 viewPager2.getAdapter().notifyDataSetChanged() 什么都不做
然后我认为一个界面只是为了更改我的文本视图中的文本,但它总是调用一个关于空指针的错误,因为我知道片段正在“暂停”,而我没有看到它,因为循环等等所以
调用 viewPager2.setAdapter(new PagerAdapter() 的娱乐,但只有在上帝想要的时候才有效?我想要一些东西来强制它或可靠
(老实说,我不再知道为什么要按照 Google 的建议使用最新的 viewpager2 和 PagerAdapter FragmentStateAdapter)我应该尝试使用 viewpager 和所有那些旧工具吗?
根据Doc ,我们可以通过调用 notifyDatasetChanged() 来更新片段,因此通过在 Adapter 中创建一个函数(setData) 并在其中调用 notifyDatasetChanged() 可以工作..如下所示
fun addData(data: ArrayList<>) {
mData = data
notifyDataSetChanged()
}
我遇到了这个问题,我的解决方法是:在adapter中使用WeakReference保存fragment实例,在需要更新数据时调用fragment中的方法。 代码是这样的:
public MyAdapter extends FragmentStateAdapter{
private Map<Integer, WeakReference<MyFragment>> fragmentMap = new HashMap();
@Override
public Fragment createFragment(int position) {
MyFragment fragment=new MyFragment();
fragmentMap.put(position, new WeakReference<>(fragment));
return fragment;
}
public void updateData(List<String> dataList){
for (int position : fragmentMap.keySet()) {
WeakReference<MyFragment> wr = fragmentMap.get(position);
if (wr != null && wr.get() != null) {
MyFragment fragment = wr.get();
fragment.updateData(dataList.get(position));
}
}
}
}
public MyFragment extends Fragment{
public void updateData(String data){
...
}
}
现在您可以在适配器上调用 updateData(List dataList) 来更新数据,并且它使用 WeakReference 来避免代码中的内存泄漏。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.