現在、アプリケーションで Sherlock パッケージとビュー インジケーター パッケージを使用して、上部にタイトルがあり、その上にアクション バーがあるビュー ページャーを作成しています。
ほとんどの場合は問題なく動作しますが、画面の向きを変更した後、invalidateOptionsMenu() が機能しなくなることに気付きました。
私のアプリが読み込まれると、デバイスを横向きモードに回転するまで正常に動作し、それ以降、invalidateOptionsMenu() 呼び出しは onCreateOptionsMenu(Menu menu) メソッドを呼び出すことはありません。
次のように、単純な OptionsMenu を作成します。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add("About")
.setIcon(R.drawable.about)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
menu.add("Refresh")
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
return true;
}
これは SherlockFragmentActivity にあります:
public class TestFragActivity extends SherlockFragmentActivity
Fragment クラスを拡張する 3 つのクラスがあります。
OverviewFrag overviewFrag;
ForecastFrag forecastFrag;
LiveFrag liveFrag;
そして、次のように SherlockFragmentActivity 内でそれらを作成します。
overviewFrag = new OverviewFrag();
forecastFrag = new ForecastFrag();
liveFrag = new LiveFrag();
次に、次のように FragmentAdapter クラスを作成します。
class TestFragmentAdapter extends FragmentPagerAdapter {
private int mCount = TAB_TITLES.length;
public TestFragmentAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return overviewFrag;
case 1:
return forecastFrag;
case 2:
return liveFrag;
default:
return null;
}
}
@Override
public int getCount() {
return mCount;
}
@Override
public CharSequence getPageTitle(int position) {
return TAB_TITLES[position];
}
}
FrgamentPagerAdapter、ViewPAger、および PageIndicator は、次のように onCreate で設定されます。
mAdapter = new TestFragmentAdapter(getSupportFragmentManager());
mPager = (ViewPager)findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
mPager.setOffscreenPageLimit(2);
mIndicator = (TitlePageIndicator)findViewById(R.id.indicator);
mIndicator.setViewPager(mPager);
デバイスが回転すると、Fragment を拡張する 3 つのクラスを保存し、次のように onCreate で返します。
overviewFrag = savedWeatherInstance.getSavedOverviewFrag();
forecastFrag = savedWeatherInstance.getSavedForecastFrag();
liveFrag = savedWeatherInstance.getSavedLiveFrag();
デバイスを回転させると、invalidateOptionsMenu() メソッドが機能しないなどの奇妙な動作が見られましたが、Fragment を次のように拡張するクラスのメソッドを呼び出したときにも奇妙な動作が見られました。
overviewFrag.refreshTask();
これは refreshTask() を実行しているようですが、ビューは正しく更新されていないようです。
私は Fragments にまったく慣れていないので、ここでライフサイクルを正しく処理したかどうかわからないので、誰か助けてもらえますか?