2011-10-26 24 views
5

内部リストを使用してフラグメントを提供するカスタムPagerFragmentAdapterViewPagerを使用しています。私は、設定の変更時にフラグメントを動的に追加したり削除したりしたいと思っています。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をリセットする必要はありません。それは、あなたのの方法であなたのの方法であなたのFragmentの(またはメソッド)を一度作成して設定すれば十分です。そして、あなたはそれに新しい要素を追加するためにあなたのアダプタのadd()メソッドを呼び出すことができます。ただし、アダプタを追加するたびにnotifyDataSetChanged()に電話することを忘れないでください。

+0

残念ながら、それほど簡単ではありません。 FragmentPagerAdapterはフラグメントをキャッシュします。カスタムPagerAdapterを作成するか、いくつかのトリックを使用する必要があります。 – Matroska

+0

あなたのコードサンプルには 'ServicePagerAdapter'と書かれています - これはライブラリクラスではないので、私はあなたが既にカスタムアダプタを使用していると仮定しました。したがって、 'PagerAdapter'クラスのカスタム実装が必要です。あなたの主な質問について - 私はそれが答えられたと思います。 – HitOdessit

+2

要素が削除されている場合は、PagerAdapterでnotifyDataSetChanged()を呼び出すだけでは不十分です。また、PagerAdapterのgetItemPositionメソッドをオーバーライドする必要があります。要素がまだ存在する場合はPOSITION_UNCHANGEDを​​返し、削除されている場合はPOSITION_NONEを返します。 –

関連する問題