Вопрос по android, replace – Заменить фрагмент программно

20

У меня есть три фрагмента, как показано на рисунке ниже. Я добавил все эти три фрагмента в LinearLayout, используя файл .xml, и когда моя активность запуска запускается, я загружаю этот формат .xml, используя setContentView.

У меня есть некоторые элементы управления для фрагмента 2. Нажав на любой загружает фрагмент4 программно, используя FragmentTransaction и метод commit. Этот фрагмент добавляется на экран, но проблема заключается в том, что программно добавленный фрагмент4 занимает всю область экрана. В чем может быть проблема?

Примечание: при любом нажатии элемента f2 я хочу заменить только f2 новым фрагментом f4. Имейте в виду, что я добавил f1, f2, f3 через файл макета xml и добавил новый фрагмент f4 программным способом.

enter image description here

Не ясно. Вы показываете все четыре фрагмента вместе в конце? Vicky Kapadia

Ваш Ответ

2   ответа
35

удалять и заменять свои фрагменты программно. Поэтому я предлагаю вам заменить фрагменты F-1, F-2 и F-3 контейнерами, такими как FrameLayout.

В основном вместо того, чтобы иметь<fragment/> элемент как F-1, вы делаете это<FrameLayout/> элемент. Затем вы выполняете транзакцию фрагмента в onCreate вашей FragmentActivity:

Fragment1 f1 = new Fragment1();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.f1_container, f1); // f1_container is your FrameLayout container
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();  

Теперь предположим, что вы сделали это для F-1, F-2 и F-3. Затем вы заменяете f2 на f4, снова делая то же самое в своемOnClickListener:

public void onClick(View v) {
    Fragment4 f4 = new Fragment4();
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.replace(R.id.f2_container, f4); // f2_container is your FrameLayout container
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    ft.addToBackStack(null);
    ft.commit();   
}
Да. Кажется о праве.
Благодарю. Хорошо, я понимаю, что не помещайте фрагменты прямо в XML-макет. Поместите рамки вместо элементов фрагмента. И при замене f4 на f2 используйте фрейм f2. Я прав? Вы можете дать ссылку на сайт, чтобы проверить это. MobiDev
Я отредактировал свой ответ. Это должно решить вашу проблему.
Есть ли у вас какие-либо ссылки, чтобы я мог взять пример оттуда? MobiDev
2

L. В OnCreate загрузите фрагменты в макете кадра. На клике по фрагменту укажите конкретный идентификатор FrameLayout для замены на Fragment4.

Похожие вопросы