[英]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.