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

How do I programmatically add this fragment to my fragment?

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

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

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

我完全不知道我需要在 ??????????部分,或者我什至会如何分配它。

只需在您的布局中添加 FrameLayout。假设您将其 ID 设为 "container",

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

我不确定你的 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,但这取决于您

如果您希望按下启用后退按钮,您可能还想将上一个片段添加到后退堆栈中:

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

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

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>

希望对您有所帮助。