[英]TabHost in FragmentActivity and screen rotation
我在FragmentActivity内使用TabHost时不理解如何在屏幕旋转上使用保留实例。 我发现了很多有关此的内容,但是他们都在谈论使用不推荐使用的onRetainNonConfigurationInstance()。 或者使用setRetainInstance(boolean)但FragmentActivity没有此方法。 只有片段拥有它。
在此链接上,您可以找到我主要活动的代码: http : //code.google.com/p/musclehackandroid/source/browse/src/com/musclehack/musclehack/MainActivity.java
提前致谢,
塞德里克
您可以使用onSavedInstanceState保存当前选定的选项卡:
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putInt("TAB_POSITION", host.getCurrentTab());
super.onSaveInstanceState(outState);
}
之后,您可以在onCreate中重新训练所选位置:
if (savedInstanceState != null) {
host.setCurrentTab(savedInstanceState.getInt("TAB_POSITION"));
}
好吧,我的应用程序大约有5000行代码,这就是为什么我将google代码git存储库放入。 但是我找到了解决方案! 首先,在创建活动时,请检查我是否在遇到问题的选项卡区域中。 如果是,我将删除所有交易信息。
if(savedInstanceState != null){
int tabPosition = savedInstanceState.getInt("TAB_POSITION");
if(tabPosition == 1){
FragmentManager manager = this.getSupportFragmentManager();
for(int i = 0; i < manager.getBackStackEntryCount(); ++i) {
manager.popBackStack();
}
}
}
然后,这是我重新加载所有片段的方法,以再次注册先前的过渡。
TabHost.OnTabChangeListener listener = new TabHost.OnTabChangeListener() {
public void onTabChanged(String tabId) {
Log.d("MainActivity","public void onTabChanged(String tabId) { called");
if(tabId.equals(TAB_A)){
pushFragments(getString(R.string.rss), fragment1rss);
}else if(tabId.equals(TAB_B)){
pushFragments(getString(R.string.worklog), fragment2worklog);
int levelChoice = WorkoutManagerSingleton.getInstance().getLevelChoice();
ListFragment nextFragment = null;
if(levelChoice > 0){
nextFragment = new Fragment2worklog_1subProg();
pushFragmentsRegisterInStack(nextFragment);
}
if(levelChoice > 1){
nextFragment = new Fragment2worklog_2week();
pushFragmentsRegisterInStack(nextFragment);
}
if(levelChoice > 2){
nextFragment = new Fragment2worklog_3day();
pushFragmentsRegisterInStack(nextFragment);
}
if(levelChoice > 3){
nextFragment = new Fragment2worklog_4exercices();
pushFragmentsRegisterInStack(nextFragment);
}
}else if(tabId.equals(TAB_C)){
pushFragments(getString(R.string.testimonials), fragment3testimonials);
}else if(tabId.equals(TAB_D)){
pushFragments(getString(R.string.recipes), fragment4recipe);
}else if(tabId.equals(TAB_E)){
pushFragments(getString(R.string.archives), fragment5archives);
}else if(tabId.equals(TAB_F)){
pushFragments(getString(R.string.book), fragment6book);
}
Log.d("MainActivity","public void onTabChanged(String tabId) { end");
}
};
/*
* adds the fragment to the FrameLayout
*/
public void pushFragments(String tag, Fragment fragment){
FragmentManager manager = this.getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
ft.replace(android.R.id.tabcontent, fragment);
ft.commit();
}
public void pushFragmentsRegisterInStack(Fragment fragment){
FragmentManager manager = this.getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
ft.replace(android.R.id.tabcontent, fragment);
ft.addToBackStack(null);
ft.commit();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.