我有一个带有 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();
}
}