如何以编程方式将此片段添加到我的片段?

时间:2016-04-05 03:51:55

标签: android android-fragments android-dialogfragment android-listfragment child-fragment

我正在尝试在DialogFragment中显示嵌套的ListFragment。

显然我不能在XML中为我的DialogFragment布局声明<fragment>,因为片段中的片段需要childFragmentManager。所以我想在DialogFragment中这样做:

Fragment listfragment = new ClassThatExtendsListFragment();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.add(????????, listfragment).commit();

我完全不知道我需要在什么资源ID中添加????????部分,或者我甚至如何分配它。

3 个答案:

答案 0 :(得分:1)

只需在布局中添加FrameLayout即可。假设你把它的id称为“容器”,

Fragment exampleFragment = new ExampleFragment();
    getSupportFragmentManager().beginTransaction()
            .add(R.id.container, exampleFragment).commit();

答案 1 :(得分:1)

我的要求也和你一样。下面的代码对我有用。

FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    MyTripFragment myTripFragment = new MyTripFragment();
    fragmentTransaction.add(R.id.fragment_container, myTripFragment);
    fragmentTransaction.commit();

XML代码:

 <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>

希望它对你有所帮助。

答案 2 :(得分:0)

我不确定您用于DialogFragment的布局类型,但通常在DialogFragment膨胀的XML中,您需要添加FrameLayout,并且重要的是为其提供ID。然后,当您执行片段事务时,传入该FrameLayout的资源ID

XML:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></FrameLayout>
</LinearLayout>

如果您想使用嵌套片段,则需要调用getChildFragmentManager()

FragmentManager fragmentManager = getChildFragmentManager()

然后进行片段交易:

FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

fragmentTransaction.replace(R.id.fragment_container, new MyFragment()).commit();

您可能希望使用add方法代替replace,但这取决于您

如果您想要按下启用后退按钮,您可能还想将前一个片段添加到Backstack:

fragmentTransaction.replace(R.id.fragment_container, new MyFragment()).addToBackStack(null).commit();