1

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

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

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

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

4

3 回答 3

1

只需在您的布局中添加 FrameLayout。假设您将其 id 指定为“容器”,

Fragment exampleFragment = new ExampleFragment();
    getSupportFragmentManager().beginTransaction()
            .add(R.id.container, exampleFragment).commit();
于 2016-04-05T04:28:55.197 回答
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>

希望对您有所帮助。

于 2016-04-05T05:37:32.377 回答
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,但这取决于您

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

fragmentTransaction.replace(R.id.fragment_container, new MyFragment()).addToBackStack(null).commit();
于 2016-04-05T04:52:50.810 回答