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

时间:2019-04-04 05:29:24

标签: java android xml android-fragments

我正在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中添加的片段的实例?

2 个答案:

答案 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()方法列出您的列表。