2

我目前在我的应用程序中使用 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 还很陌生,而且我不确定我是否在这里正确处理了它们的生命周期?

4

0 回答 0