2011-10-26 103 views
5

我正在使用ViewPager和自定義PagerFragmentAdapter,它使用內部列表來提供片段。我想在設置更改時動態添加和刪除片段。在ViewPager中動態添加和刪除片段

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.fragment_pager); 
    mAdapter = new ServicePagerAdapter(getSupportFragmentManager()); 
    mPager = (ViewPager) findViewById(R.id.pager); 
    mPager.setAdapter(mAdapter); 
} 

我試圖再次調用setAdapter但我獲得IllegalStateException (Can not perform this action after onSaveInstanceState)

怎樣才能達到我的目的?

回答

2

您無需每次都重設ServicePagerAdapter。只需在您的Activity(或的onActivityCreated()方法)的onCreate()方法中創建並設置一次就可以了,然後您可以簡單地調用add()方法來向其添加新元素。但是,每次添加適配器後都不要忘記撥打notifyDataSetChanged()

+0

不幸的是,這並不容易。 FragmentPagerAdapter緩存碎片,你必須創建一個自定義的PagerAdapter或使用一些技巧。 – Matroska

+0

在你的代碼示例中提到'ServicePagerAdapter' - 這不是一個庫類,所以我假設你已經使用了自定義適配器。所以是的,你需要定製實現'PagerAdapter'類。關於你的主要問題 - 我認爲這是回答。 – HitOdessit

+2

如果元素已被刪除,那麼在PagerAdapter上調用notifyDataSetChanged()是不夠的。您還需要重寫PagerAdapter的getItemPosition方法。如果元素仍然存在,則返回POSITION_UNCHANGED;如果元素已被移除,則返回POSITION_NONE。 –