У меня есть три фрагмента, как показано на рисунке ниже. Я добавил все эти три фрагмента в LinearLayout, используя .xml-файл, и когда запускается моя активация запуска, я загружаю этот макет .xml с помощью setContentView.
У меня есть некоторые элементы управления на фрагменте2. Нажав на кого-нибудь, загрузите программный код с помощью метода FragmentTransaction и commit. Эти фрагменты добавляются к экрану, но проблема заключается в том, что фрагмент4 с программным добавлением занимает всю площадь экрана. В чем проблема?
Примечание: на любой элемент нажмите на f2. Я хочу заменить только f2 новым фрагментом f4. Имейте в виду, что я добавил файл макета f1, f2, f3 через xml и добавив новый фрагмент f4 программно.
Заменить фрагмент программно
ответ
Вы всегда должны добавлять, удалять и заменять фрагменты программным путем. Поэтому я предлагаю вам заменить ваши фрагменты 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();
}
Есть ли у вас какие-либо ссылки, чтобы я мог взять пример оттуда? – MobiDev
Я отредактировал свой ответ. Это должно решить вашу проблему. – CodePrimate
Спасибо. ОК, что я понимаю, не помещайте фрагменты непосредственно в макет xml. Поместите фреймэлей вместо фрагментных элементов. И при замене f4 на f2 используйте фрейм f2. Я прав? Вы можете дать ссылку на сайт, чтобы проверить это. – MobiDev
Храните только FrameLayout в качестве заполнителей для фрагмента в XML. В OnCreate загружаются фрагменты в framelayout. OnClick фрагмента, укажите, что конкретный идентификатор FrameLayout заменяется на Fragment4.
- 1. Фрагмент заменить мигающий старый фрагмент
- 2. Заменить фрагмент макета, содержащего фрагмент
- 3. Добавление программно в фрагмент
- 4. Заменить фрагмент в ViewPager
- 5. Заменить фрагмент внутри вкладки
- 6. Заменить фрагмент в ListFragment
- 7. Невозможно заменить фрагмент другим
- 8. заменить фрагмент без onDestroy
- 9. Заменить фрагмент внутри ViewPagerAdapter
- 10. Заменить фрагмент по щелчку
- 11. Брус понять фрагмент заменить
- 12. Заменить фрагмент на MainPage
- 13. андроид заменить вид (фрагмент)
- 14. Заменить фрагмент кнопкой
- 15. SlidingTabLayout: заменить фрагмент
- 16. заменить фрагмент из фрагмента
- 17. Как заменить фрагмент на другой фрагмент?
- 18. заменить фрагмент и добавить фрагмент в Android
- 19. Заменить один фрагмент на другой фрагмент
- 20. Как заменить пользовательский фрагмент на другой фрагмент?
- 21. Заменить фрагмент и удалить старый фрагмент
- 22. Фрагмент не смог заменить фрагмент в viewpager
- 23. Как добавить фрагмент карты программно
- 24. Изменить логотип программно в Фрагмент
- 25. Программно добавить кнопки в фрагмент
- 26. заменить фрагмент из другого фрагмента
- 27. IlegalStateException при попытке заменить фрагмент
- 28. Android: невозможно добавить/заменить фрагмент
- 29. Заменить один фрагмент на другой
- 30. Как заменить фрагмент на FragmentActivity
Непонятно. Вы показываете все четыре фрагмента вместе в конце.? –