Установите новый макет в фрагменте

Я пытаюсь изменить макет фрагмента во время выполнения в определенном состоянии.

Первоначальный макет в раздутом внутри onCreateView ():

@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.cancel_video, null); } 

Затем через некоторое время в коде фрагмента я хотел бы заменить исходный макет на другой макет.

Я пробовал несколько вещей до сих пор; Это последнее, что у меня есть:

 private void Something(){ if(checkLicenseStatus(licenseStatus, statusMessage)){ View vv = View.inflate(getActivity(), R.layout.play_video, null); //more code } } 

Как я могу это сделать?

Вы не можете заменить макет фрагмента после его установки. Если вам нужна условная компоновка, вам нужно либо перепроектировать макет, либо разбить его на еще более мелкие фрагменты, либо вы можете сгруппировать все элементы макета в LinearLayout (например, LinearLayout ), а затем поместить их все в RelativeLayout , положение для перекрытия друг друга и обмена Видимость этих LinearLayout s с помощью setVisibility() при необходимости.

Используйте FragmentTransaction через FragmentManger

 FragmentManager fm = getFragmentManager(); if (fm != null) { // Perform the FragmentTransaction to load in the list tab content. // Using FragmentTransaction#replace will destroy any Fragments // currently inside R.id.fragment_content and add the new Fragment // in its place. FragmentTransaction ft = fm.beginTransaction(); ft.replace(R.id.fragment_content, new YourFragment()); ft.commit(); } 

Код для класса YourFragment – это только макет LayoutInflater, чтобы он возвращал представление

 public class YourFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.your_fragment, container, false); return view; } } 

Да, я сделал это следующим образом. Когда мне нужно установить новый макет (xml), должен быть выполнен следующий фрагмент кода.

  private View mainView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup containerObject, Bundle savedInstanceState){ super.onCreateView(inflater, containerObject, savedInstanceState); mainView = inflater.inflate(R.layout.mylayout, null); return mainView; } private void setViewLayout(int id){ LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); mainView = inflater.inflate(id, null); ViewGroup rootView = (ViewGroup) getView(); rootView.removeAllViews(); rootView.addView(mainView); } 

Когда мне нужно изменить макет, я просто вызываю следующий метод

  setViewLayout(R.id.new_layout); 
Intereting Posts
Рассчитать возраст, используя дату рождения Раздражающее поведение для ShapeDrawable в Android Как правильно реализовать фид (аналогично Facebook / Instagram) в Android? Java, android, разрешить URL-адрес, получить перенаправленный uri Android – программно проверьте подключение к Интернету и диалог отображения, если не подключен Анимировать определенные элементы ListView Как ускорить сборку android ndk Почему Android CollapsingToolbarLayout + NestedScrollView не прокручивается до конца, когда отображается мягкая клавиатура Определить существование функции Google Streetview Эксперимент с гамма-кривой – преобразование 2,2 в противоположность 1,8? Почему я могу написать «mnt / sdcard», а не «mnt / extsd»? Как создать лицензионный ключ в качестве загружаемого и проверить его на Android Невозможно сжать переработанное растровое изображение BitmapFactory.decodeStream (InputStream is) возвращает значение null для non null InputStream на Android Как обновить базу данных мультимедиа Android