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

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

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

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

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


comment
stackoverflow.com/questions/18296868/ попробуйте....   -  person kishu mewara    schedule 05.04.2016


Ответы (3)


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

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

Мое требование также было таким же, как и вы. ниже код работал для меня.

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>

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

person Venu    schedule 05.04.2016

Я не уверен, какой тип макета вы используете для своего 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, но это на ваше усмотрение.

Вы также можете добавить предыдущий фрагмент в стопку, если хотите, чтобы кнопка включения нажимала кнопку «Назад»:

fragmentTransaction.replace(R.id.fragment_container, new MyFragment()).addToBackStack(null).commit();
person Simon    schedule 05.04.2016
comment
Это фрагмент во фрагменте, поэтому вы не можете использовать обычный менеджер. Также я предполагаю, что этот код входит в метод oncreateddialog моего диалогового фрагмента? - person AJJ; 05.04.2016
comment
Не заметил этого. В этом случае вы просто использовали бы childfragmentmanager вместо обычного менеджера фрагментов. То, что вы передаете в метод добавления/замены в качестве первого аргумента, будет таким же (идентификатор ресурса макета фрейма, в котором вы хотите отобразить подфрагмент) - person Simon; 05.04.2016
comment
Где вы размещаете этот код, зависит от того, где/когда вы хотите, чтобы ваш ListFragment отображался. Как только вы выполните приведенный выше код, транзакция фрагмента будет зафиксирована, и все будет отображаться. Так что просто поместите его в подходящее место, когда вы хотите, чтобы новый фрагмент ожил. - person Simon; 05.04.2016
comment
Как узнать, использовать добавить или заменить? Что делать, если я использую фрагменты поддержки? - person AJJ; 05.04.2016
comment
Какова минимальная версия SDK/API, на которую вы ориентируетесь? - person Simon; 05.04.2016
comment
Я думаю, что это может быть связано с DialogFragment, а не с вложенными фрагментами: stackoverflow.com/questions/20303865/ - person Simon; 05.04.2016