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