【问题标题】:Tabhost with fragments recreating views带有片段的 Tabhost 重新创建视图
【发布时间】:2014-05-30 19:13:34
【问题描述】:

我正在开发主视图是 tabhost 活动的应用程序。 Tabhost 包含 fagments。我面临的问题是,每当我从一个选项卡切换到另一个选项卡时,都会重新创建片段。这不是预期的行为。当用户在第一个选项卡中填写一些数据时,然后转到第二个并返回到第一个,所有填充的数据都消失了。有没有办法阻止 tabhost 重新创建视图,或者我应该使用 viewPager 来代替?

【问题讨论】:

    标签: android android-fragments android-viewpager android-tabhost


    【解决方案1】:

    如果您使用.replace() 方法替换Fragment 容器布局,则它在内部首先调用.remove(),然后添加.add(),以便再次调用您的onCreateview(...)

    最好的方法是代替替换Fragment容器布局尝试使用ft.detach(Fragment);ft.attach(Fragment);

    它有什么作用?

    ft.detach(Fragment);// 从 FragmentTransaction 中分离你的 Fragment

    ft.attach(Fragment)// 从 FragmentTransaction 附加片段

    下面我给你看一个演示:

        android.support.v4.app.FragmentManager fm =   getSupportFragmentManager();
        AndroidFragment myfragment= (AndroidFragment) fm.findFragmentByTag("fragment1");
        android.support.v4.app.FragmentTransaction ft = fm.beginTransaction();
    
        if(fragment==null){
        /** Create Fragment and adding to fragmenttransaction */
        ft.add(R.id.realtabcontent,new AndroidFragment(), "fragment1");
         }else{
        /** Bring to the front, if already exists in the fragmenttransaction */
        ft.attach(myfragment);
         }
    

    有关更多信息,请查看此Blog

    【讨论】:

    • 感谢回答,看来我必须自己负责切换标签,稍后再试,如果可行,请接受答案
    • @Greg 完全正确。我过去遇到过同样的问题,我已经通过使用它解决了。希望对你有帮助。
    • 我看起来在我的情况下还有其他东西可以重新创建片段。我使用的是 FragmentTabHost 而不是 TabHost,正如您在源代码 grepcode.com/file/repository.grepcode.com/java/ext/… 中看到的那样,已经实现了分离/附加功能
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多