我目前在我的应用程序中使用 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 类的类:
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];
}
}
FragmentPagerAdapter、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);
当设备旋转时,我保存 3 个 Classes hat extend Fragment 并在 onCreate 中返回它们,如下所示:
overviewFrag = savedWeatherInstance.getSavedOverviewFrag();
forecastFrag = savedWeatherInstance.getSavedForecastFrag();
liveFrag = savedWeatherInstance.getSavedLiveFrag();
这就是我所做的一切,当我旋转设备时,我看到了一些奇怪的行为,例如 invalidateOptionsMenu() 方法不起作用,但当我在类中调用扩展 Fragment 的方法时也出现了一些奇怪的行为,如下所示:
overviewFrag.refreshTask();
这似乎运行了 refreshTask() 但视图似乎没有正确更新。
谁能帮助我,因为我对 Fragments 还很陌生,而且我不确定我是否在这里正确处理了它们的生命周期?