5
内部リストを使用してフラグメントを提供するカスタムPagerFragmentAdapter
のViewPager
を使用しています。私は、設定の変更時にフラグメントを動的に追加したり削除したりしたいと思っています。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)
を得ます。
私の目的はどのように達成できますか?
残念ながら、それほど簡単ではありません。 FragmentPagerAdapterはフラグメントをキャッシュします。カスタムPagerAdapterを作成するか、いくつかのトリックを使用する必要があります。 – Matroska
あなたのコードサンプルには 'ServicePagerAdapter'と書かれています - これはライブラリクラスではないので、私はあなたが既にカスタムアダプタを使用していると仮定しました。したがって、 'PagerAdapter'クラスのカスタム実装が必要です。あなたの主な質問について - 私はそれが答えられたと思います。 – HitOdessit
要素が削除されている場合は、PagerAdapterでnotifyDataSetChanged()を呼び出すだけでは不十分です。また、PagerAdapterのgetItemPositionメソッドをオーバーライドする必要があります。要素がまだ存在する場合はPOSITION_UNCHANGEDを返し、削除されている場合はPOSITION_NONEを返します。 –