繁体   English   中英

从xml添加的片段无法在Backstack中找到

[英]Fragment added from xml cannot be found in Backstack

我在xml文件中添加了一个片段,但是我无法在Backstack中找到该片段的实例。

以下是我的xml代码

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragOneContainer"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <fragment class="com.myproject.fragments.fragmentname"
        android:id="@+id/frag"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:tag="inspectionSearch">

    </fragment>
</FrameLayout>

下面是我用来获取片段列表的代码

FragmentManager fragmentManager = getFragmentManager();
List<Fragment> fragmentList = fragmentManager.getFragments();
        for(int i=0;i<fragmentList.size();i++){
            Log.d(TAG,"Fragment at "+i+" = "+fragmentList.get(i).getClass().getName());
        }

注意:我在fragOneContainer中动态添加的片段出现在Backstack中。

如何获取我在xml中添加的片段的实例?

从xml添加的片段不会存储在Backstack中。 要点是,如果通过xml添加该片段是静态分配的,则无法替换它。 如果您想向后堆栈,则可以通过Java(或Kotlin)动态添加此片段

如果只需要片段列表,则可以使用getSupportFragmentManager()。getFragments()来获取它,无论它是从XML文件动态添加还是静态添加的,如下所示:

使用getSupportFragmentManager()。getFragments()如下:

FragmentManager fragmentManager = getSupportFragmentManager();
List<Fragment> fragmentList = fragmentManager.getFragments();
for(int i=0;i<fragmentList.size();i++){
    Log.d(TAG,"Fragment at "+i+" = "+fragmentList.get(i).getClass().getName());
}

代替

FragmentManager fragmentManager = InspectionSearchFrame.fm;

我们无法在xml中添加的backstack中获得该片段,因为我们必须手动将其放入backstack条目中。 如果您将使用getSupportFragmentManager()。getBackStackEntryCount(),那么您将获得0计数,因为getSupportFragmentManager()不会计算xml中添加的片段,但仍可以使用getSupportFragmentManager()。getFragments()方法列出您的列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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