Подтвердить что ты не робот

Заменить фрагмент программно

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

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

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

enter image description here

4b9b3361

Ответ 1

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

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

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

Ответ 2

Храните только FrameLayout в качестве заполнителей для фрагмента в XML. В OnCreate загружаются фрагменты в framelayout. OnClick фрагмента, дайте этому конкретному идентификатору FrameLayout заменить на Fragment4.