Android 具有多个片段的ActionBar片段视图
我有一个带有1个活动的应用程序,其中有3个选项卡是用ActionBar Sherlock创建的。其中一个选项卡有一个ListFragment,当选择一个项目时,它将被其他片段替换 我遇到的问题是重新创建视图的时间(例如方向更改)。我不知道如何在方向改变时保持在当前活动的片段上。例如,如果我正在查看一个片段,然后更改方向,它将返回到ListFragment 我理解它为什么这样做,因为它在主活动中调用onCreate,但我不知道如何取回最后一个片段。我已经在Android开发者页面上浏览了无数次,搜索了几乎所有与之相关的stackoverflow问题,但我不知道如何在我的应用程序中做到这一点。 如果有人能解释我如何在重新加载视图时保留片段,那就太好了 这是我的onCreateAndroid 具有多个片段的ActionBar片段视图,android,android-fragments,android-actionbar,android-tabs,Android,Android Fragments,Android Actionbar,Android Tabs,我有一个带有1个活动的应用程序,其中有3个选项卡是用ActionBar Sherlock创建的。其中一个选项卡有一个ListFragment,当选择一个项目时,它将被其他片段替换 我遇到的问题是重新创建视图的时间(例如方向更改)。我不知道如何在方向改变时保持在当前活动的片段上。例如,如果我正在查看一个片段,然后更改方向,它将返回到ListFragment 我理解它为什么这样做,因为它在主活动中调用onCreate,但我不知道如何取回最后一个片段。我已经在Android开发者页面上浏览了无数次,搜
@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。因此,您必须测试捆绑包的内容。如果为空,则它是活动的第一次创建,您可以保持相同的逻辑。如果没有,则意味着您必须重新创建一个片段,并且捆绑包应该包含执行此操作所需的数据。