【问题标题】:Unable to remove Nested fragment completely from Main Fragment无法从主片段中完全删除嵌套片段
【发布时间】:2015-07-30 05:40:03
【问题描述】:

在我的活动中,我有各种片段。默认情况下,活动显示地图。点击 listitem 时,片段 A、B 或 C 会使用以下代码显示:

protected void replaceFragment(int i) {
    FragmentManager fragmentManager = getFragmentManager();
    android.app.FragmentTransaction fragmentTransaction = fragmentManager
            .beginTransaction();
    switch (i) {
    case FRAGMENT_A:
        aFragment = new AFragment ();
        fragmentTransaction.replace(R.id.main_framelayout_replace,
                aFragment , TAG_A_FRAGMENT);
        fragmentTransaction.commit();
        break;//and so on.....
     default:
        break;
    }
}

在这里我遇到了一个问题:当我用 FragB 替换 FragA 时,FragB 是嵌套片段,即它本身包含列表和详细信息片段。当我尝试删除 FragB 以外的任何片段时,我能够成功完成并显示默认地图屏幕,但是当我在 FragB 上并尝试删除它时,我无法看到默认地图屏幕。而是显示一个空白的白色屏幕。

碎片的去除如下:

if (aFragment != null) {
                        fragmentManager.beginTransaction()
                                .remove(aFragment ).commit();
                    }//and so on...

对于具有列表和详细片段的FragB,我也在FragB的onDetach中进行跟踪,

fragmentManager.beginTransaction()
                    .remove(MainActivity.listFragment).commit();

我在这里做错了吗?任何帮助表示赞赏。

注意:我在任何 try catch 中都没有遇到任何异常。包括 FragB 的 onDetach 在内的所有代码行都在无错误地执行。

【问题讨论】:

    标签: android android-fragments android-nested-fragment


    【解决方案1】:

    在您的 FragB 类(扩展 Fragment)中,您应该使用 ChildFragmentManager 来管理嵌套片段。

    【讨论】:

    • 也试过了,但没用...仍然是同样的黑屏问题。
    • 您的代码 sn-ps 有点太稀疏了。我不知道您是否在 FragA 上同时调用了 replace() 和 remove()。如果调用replace(),则不需要显式删除FragA、FragB 或FragC。您需要明确删除的唯一片段是 FragB 的子片段。
    • 每当我需要在片段之间切换时,我都会使用替换。当我需要导航到主屏幕时,我使用删除。但是FragB是嵌套片段,除了为FragB本身调用remove之外,我还在FragB的onDetach中调用子片段的remove方法。
    • 确保只创建一次 AFragment()。我认为您可能正在创建重复项。我在 Activity.onCreate() 期间为所有片段创建一次基类,然后根据需要在 FragmentTransaction.replace() 中重用它们。
    • 公平点。我将 aFragment = new AFragment (); 和等价物从 replaceFragment() 移动到 MainActivity 的 onCreate()。但是,同样的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多