我使用的Viewpager
與FragmentPagerAdapter
允許添加和刪除頁面。每個頁面顯示從互聯網獲得的數據。Viewpager和FragmentPagerAdapter:頁面視圖刪除
隨着新頁面的添加,新的Fragment與該頁面相關聯。數據通過AsyncTask獲取並顯示在Fragment中。當用戶選擇刪除一個頁面時,這個想法是銷燬該頁面和相關的片段。
總的來說,這一切都很好。我看到的問題如下:
您有三個頁面的數據:
[第1頁] [第2頁] [第3頁]
你刪除任何除最後一頁以外的頁面,比如第2頁;頁2按需要消失:
[1] [第3頁]
您添加新的頁面;但不是空白的新頁面,新頁面顯示的是第3頁的數據(視圖)。
[Page 1] [第3頁] [第4頁,但顯示第3頁的視圖/數據應爲空白]
在我的活動頁面移除代碼如下:
// Destroy fragment for this page
DataListFragment curFrag = getFragmentByName(currentPage);
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction().remove(curFrag).commit();
fm.executePendingTransactions();
curFrag = null;
// Remove page and update adapter
mPageTitles.remove(position);
mAdapter.notifyDataSetChanged();
使用調試器,則說明該片段從FragmentManager
刪除撥打executePendingTransactions()
後。但在FrampePagerAdapters
調用mAdapter.notifyDataSetChanged()
中,片段被添加回來,然後在創建新頁面時顯示。
我試過使用FrameStatePagerAdapter,因爲那應該允許銷燬碎片,但它不起作用。在我的FragmentPagerAdapter的getItemPosition()
方法中,我使用return FragmentAdapter.POSITION_NONE;
,正如在我遇到的另一篇SO文章中指出的那樣。
看起來好像該頁面的視圖沒有被銷燬,但後來又被添加回新頁面。我試圖在新頁面的視圖上使用removeViewAt()
方法,但這並不奏效。
作爲新來這個,我敢肯定,我失去了一些東西明顯...
我不知道它的東西很明顯。我也遇到這個問題。你解決了嗎?這裏可能有一個答案:http://stackoverflow.com/questions/12510404/reorder-pages-in-fragmentstatepageradapter-using-getitempositionobject-object –
你可以告訴我們你的覆蓋方法:public Fragment getItem(int position) – Gomino
When你正在刪除一個片段,你不會從適配器中刪除它。這就是它再次出現的原因。您需要將它從適配器中刪除(不是查看,而是在getItem()方法中使用的Item)。第四個片段看起來像第三個,因爲它重用了片段,就像ListView的適配器一樣。適配器邏輯中有錯誤。顯示你的適配器類 –