Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 具有多个片段的ActionBar片段视图_Android_Android Fragments_Android Actionbar_Android Tabs - Fatal编程技术网

Android 具有多个片段的ActionBar片段视图

Android 具有多个片段的ActionBar片段视图,android,android-fragments,android-actionbar,android-tabs,Android,Android Fragments,Android Actionbar,Android Tabs,我有一个带有1个活动的应用程序,其中有3个选项卡是用ActionBar Sherlock创建的。其中一个选项卡有一个ListFragment,当选择一个项目时,它将被其他片段替换 我遇到的问题是重新创建视图的时间(例如方向更改)。我不知道如何在方向改变时保持在当前活动的片段上。例如,如果我正在查看一个片段,然后更改方向,它将返回到ListFragment 我理解它为什么这样做,因为它在主活动中调用onCreate,但我不知道如何取回最后一个片段。我已经在Android开发者页面上浏览了无数次,搜

我有一个带有1个活动的应用程序,其中有3个选项卡是用ActionBar Sherlock创建的。其中一个选项卡有一个ListFragment,当选择一个项目时,它将被其他片段替换

我遇到的问题是重新创建视图的时间(例如方向更改)。我不知道如何在方向改变时保持在当前活动的片段上。例如,如果我正在查看一个片段,然后更改方向,它将返回到ListFragment

我理解它为什么这样做,因为它在主活动中调用onCreate,但我不知道如何取回最后一个片段。我已经在Android开发者页面上浏览了无数次,搜索了几乎所有与之相关的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());
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    if (savedInstanceState.containsKey(STATE_SELECTED_NAVIGATION_ITEM)) {
        getActionBar().setSelectedNavigationItem(
                savedInstanceState.getInt(STATE_SELECTED_NAVIGATION_ITEM));
    }
}
OnRestoreInstanceState

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt(STATE_SELECTED_NAVIGATION_ITEM, getActionBar()
            .getSelectedNavigationIndex());
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    if (savedInstanceState.containsKey(STATE_SELECTED_NAVIGATION_ITEM)) {
        getActionBar().setSelectedNavigationItem(
                savedInstanceState.getInt(STATE_SELECTED_NAVIGATION_ITEM));
    }
}
安大略省选举

@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();
    }

}

使用该捆绑包存储您需要的信息。在这里,看起来您至少需要存储下次创建活动时要显示的片段类型。好的,谢谢。因此,在片段中,我将该片段类型保存到一个Bundle中,然后在活动中,我如何在创建活动时显示它?我猜是在RestoreInstanceState中?否:)。每次重新创建活动时都将调用onCreate。因此,您必须测试捆绑包的内容。如果为空,则它是活动的第一次创建,您可以保持相同的逻辑。如果没有,则意味着您必须重新创建一个片段,并且捆绑包应该包含执行此操作所需的数据。