ViewPager+FragmentStatePagerAdapter を使用したホスト アクティビティがあり、これにより一連のフラグメント (同じ ItemFragment クラスの異なるインスタンス) をスワイプし、各フラグメントを設定するためのデータをネットワークから取得します。
ここで、スワイプしながら、現在のフラグメントからのプロパティでアクション バーのタイトルを更新したいので、OnPageChangeListener/onPageSelected を使用してその作業を行います。
...
@Override
public void onPageSelected(int position) {
MyFragment currentFragment = (MyFragment) getSupportFragmentManager().findFragmentById(R.id.view_pager);
getSupportActionBar().setTitle(currentFragment.propertyIWantToUseAsTitle);
}
...
ここでいくつかの疑問があります:
- 実際の現在のフラグメントを取得していますか? FragmentStatePageAdapter は各フラグメントにタグを設定しないため、ViewGroup コンテナを使用する以外に現在のフラグメントを取得する方法がわかりません
- onPageSelected が呼び出されると、追加されたフラグメントは、npe を引き起こすアクション バーのタイトルを設定するために必要なデータを取得している可能性があります。
上記のシナリオでアクション バーのタイトルを更新するロジックを維持するのに最適な場所はどこですか?
ps。必要なデータが利用可能になったときに ab を更新するコードを MyFragment に追加する混合アプローチを試しました。問題は、フラグメントの読み込みが完了すると、アクション バーのタイトルが変化する前に読み込まれるフラグメントがほとんどないことです。その結果、ab タイトルは数ページ先のフラグメントからのランダムなタイトルになります。
助けてくれてありがとう!