Как программно добавить этот фрагмент в мой фрагмент?
Я пытаюсь отобразить вложенный 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();