我正在xml文件中添加一个片段,但是我无法在后堆栈中找到该片段的实例。
下面是我的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中动态添加的片段出现在后堆栈中。
如何获取在xml中添加的片段的实例?
答案 0 :(得分:4)
从xml添加的片段不会存储在后堆栈中。要点是,如果通过xml添加该片段是静态分配的,则无法替换它。如果您想返回堆栈,则可以通过java(或kotlin)动态添加此片段
答案 1 :(得分:2)
如果仅需要片段列表,则可以使用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()方法列出您的列表。