0

我們的應用程序有多個片段來顯示特定於位置的數據。我們使用了FragmentStatePagerAdapter和ViewPager。用戶應該可以添加新頁面並刪除。雖然添加新頁面可以正常工作,但刪除現有頁面會顯示問題。當我確認我有3頁時。我從左側導航菜單按鈕中刪除了第二個。當我嘗試滑動到第三頁時,它顯示了第二頁的已刪除頁面的視圖。並且它不顯示第三頁。從FragmentStatePagerAdapter中刪除頁面會導致問題

我有Overriden getItem()我返回新頁面。當我向Adapter添加/刪除新頁面時,我調整了ItemCount。我在添加/刪除之前調用startUpdate(),destroy()刪除位置中的任何片段對象,在所有事情完成後刪除finishUpdate()。最後notifyDataSetChanged()。

看起來沒有什麼是錯過的,但一些東西。我仍然可以看到已刪除片段的視圖,並且它旁邊是空白頁面或類似的內容,具體取決於我刪除哪個位置的頁面。 我看到Removing fragments from FragmentStatePagerAdapter是類似的東西,但無法幫助我的情況。幫助我的任何線索。

+1

我記得'FragmentStatePagerAdapter'有問題,每當我試圖改變它後面的數據(在我的情況下重新排序項目)。我想我最終編寫了自己從'FragmentStatePagerAdapter'借用的尋呼機適配器,但在處理數據集更改時顯着改變了行爲。不幸的是,我手上沒有代碼... – Karakuri

回答

0

我可以解決它。雖然Wize在這裏的回答Replace Fragment inside a ViewPager並不能解決我的問題,但我可以從中找到一個提示。我不得不重寫getItemPosition(Object對象),它告訴系統粒子的「對象」沒有改變/不再存在。

我有片段(引用)的名單在本地以及我修改根據該FragmentStateAdapter maintians,這裏是我的getItemPosition()的代碼清單:

@Override 
    public int getItemPosition(Object object) { 
     if (object instanceof myFragment) { 
     if (!mFragments.contains(object)) { 
       return POSITION_NONE; 
      } else { 
       return mFragments.indexOf(object); 
      } 
     } 
     return super.getItemPosition(object); 
    } 

而且,我只叫notifyDataSetChanged( )添加/刪除片段後。我刪除了startUpdate(),finishUpdate()所有這些。我不知道它們在哪裏使用。但它沒有它們。

相關問題