Как программно добавить этот фрагмент в мой фрагмент?

Я пытаюсь отобразить вложенный ListFragment внутри моего DialogFragment.

Видимо я не могу просто объявить <fragment> в XML для моего макета DialogFragment, поскольку для фрагментов во фрагментах требуется childFragmentManager. Поэтому я пытаюсь сделать это в моем DialogFragment:

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

Я абсолютно не знаю, какой идентификатор ресурса мне нужно добавить в???????? раздел, или как я бы даже назначить его.

3 ответа

Решение

Просто добавьте FrameLayout в свой макет. Предположим, вы дали его идентификатор как "контейнер",

Fragment exampleFragment = new ExampleFragment();
    getSupportFragmentManager().beginTransaction()
            .add(R.id.container, exampleFragment).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>

Надеюсь, это поможет вам.

Я не уверен, какой тип макета вы используете для DialogFragment, но обычно в XML, который раздувает DialogFragment, вам нужно добавить FrameLayout и, что важно, дать ему удостоверение личности. Затем, когда вы выполняете транзакцию фрагмента, вы передаете идентификатор ресурса этого FrameLayout.

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();