Intereting Posts
Могут ли Honeycomb Loaders решать проблемы с обновлением AsyncTask + UI? Phonegap 1.4.1 Плагин WebIntent Ошибка «Класс не найден» Android Причины, что принятое намерение будет NULL в onStartCommand Замена стандартного программного кодека Android H264 на основе ffmpeg ViewPager с фрагментами внутри PopupWindow (или DialogFragment) – ошибка не найдена для id для фрагмента Произошла ошибка при сборе предметов для установки Перетаскивание элемента в том же Gridview с перестановкой Когда я должен использовать 9 патч-изображений в android Android-приложение для планшетов, все еще показывающее «Предназначено для телефонов» Android: невозможно обновить Listview с помощью CustomAdapter Файл не синхронизирован. Использование 1.7 требует компиляции с Android 4.4 (KitKat); В настоящее время использует API 16 Как приостановить Eclipse на любом исключении? Предотвращение растягивания фонового изображения База данных Android SQLite: медленная вставка ANR Входная диспетчеризация

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

У меня есть три фрагмента, как показано на рисунке ниже. Я добавил все эти три фрагмента в 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.