0

我有一个带有 1 个 Activity 的应用程序,它有 3 个使用 ActionBar Sherlock 创建的选项卡。其中一个选项卡有一个 ListFragment,然后在选择项目时将其替换为其他 Fragment。

我遇到的问题是重新创建视图(例如方向更改)。当方向改变时,我无法弄清楚如何保持在当前处于活动状态的 Fragment 上。例如,如果我正在查看一个片段然后更改方向,它将返回到 ListFragment。

我理解它为什么这样做,因为它在主要活动中调用 onCreate 但我不知道如何取回最后一个片段。我查看了 Android 开发人员页面,无数次地用 Google 搜索并查看了几乎所有与之相关的 stackoverflow 问题,但我只是不明白如何在我的应用程序中执行此操作。如果有人能解释我如何在重新加载视图时保留片段,那就太好了。

这是我的onCreate ...

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
        // Set up navigation bar to show tabs
        final ActionBar actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        // Add tabs to navigation bar
        actionBar.addTab(actionBar.newTab().setText("Sermons")
                .setTabListener(this));
        actionBar.addTab(actionBar.newTab().setText("Downloads")
                .setTabListener(this));
        actionBar.addTab(actionBar.newTab().setText("Contact")
                .setTabListener(this));
}

OnSaveInstanceState...

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt(STATE_SELECTED_NAVIGATION_ITEM, getActionBar()
            .getSelectedNavigationIndex());
}

OnRestoreInstanceState...

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    if (savedInstanceState.containsKey(STATE_SELECTED_NAVIGATION_ITEM)) {
        getActionBar().setSelectedNavigationItem(
                savedInstanceState.getInt(STATE_SELECTED_NAVIGATION_ITEM));
    }
}

OnTab 已选择...

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
    String tabText = (String) tab.getText();

    if (tabText == "Audio") {
        fragment = new AudioCategoryFragment();
        getFragmentManager()
                .beginTransaction()
                .setCustomAnimations(android.R.animator.fade_in,
                        android.R.animator.fade_out)
                .replace(R.id.fragment_container, fragment).commit();
    } else if (tabText == "Downloads") {
        fragment = new DownloadsFragment();
        getFragmentManager()
                .beginTransaction()
                .setCustomAnimations(android.R.animator.fade_in,
                        android.R.animator.fade_out)
                .replace(R.id.fragment_container, fragment).commit();
    } else if (tabText == "Contact") {
        fragment = new ContactsFragment();
        getFragmentManager()
                .beginTransaction()
                .setCustomAnimations(android.R.animator.fade_in,
                        android.R.animator.fade_out)
                .replace(R.id.fragment_container, fragment).commit();
    }

}
4

0 回答 0