繁体   English   中英

FragmentActivity中的TabHost和屏幕旋转

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM