Intereting Posts
Как передать значения между фрагментами Как запустить или отладить на Android-телефоне вместо эмулятора? Android-град: buildtoolsVersion vs compileSdkVersion Что такое метод удобства в Java? Как расширить список навигации в панели действий? Продолжить отчет о покрытии кода jacoco после теста с ошибкой Нужен образец проекта Android REST Client, который реализует шаблон реализации REST Вергилия Добжански Несколько push-сообщений: содержимое адаптера изменилось, но ListView не получил уведомление Как перейти из Галереи в HorizontalScrollView & ViewPager? Обращайтесь с Android Back Button на Phonegap InAppBrowser Сохранять открытое / закрытое состояние клавиатуры для EditText, когда приложение выходит на передний план Восстановить файл в Android Studio? Android проверяет статус WIFI (отключен или пользователь изменен WIFI) Как FLAG это? Когда удаляются SharedPreferences? Как узнать вызываемого абонента отвечает на вызов (что такое состояние телефона, когда он поднимает вызов)

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

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

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

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

Введите описание изображения здесь

Solutions Collecting From Web of "Заменить фрагмент программно"

Вы всегда должны добавлять, удалять и заменять свои фрагменты программно. Поэтому я предлагаю вам заменить фрагменты 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 то же самое в своем 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(); } 

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