Предыдущий фрагмент, видимый под новым фрагментом
У меня есть вкладка + ViewPager
layout, и на одной из этих вкладок у меня есть представление списка. Когда я заменяю этот фрагмент списка на onclick, я все еще вижу старый фрагмент под новым фрагментом. См:
![enter image description here]()
Код:
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
HallsInStateFragment hallsForState = new HallsInStateFragment();
transaction.replace(R.id.container, hallsForState);
transaction.addToBackStack(null);
transaction.commit();
где R.id.container
- это FrameLayout в представлении.
Ответы
Ответ 1
Вместо R.id.container введите id этого фрагмента следующим образом: ((ViewGroup)getView().getParent()).getId()
. Фактически он не заменяет фрагмент, а предыдущий макет i.e FrameLayout. Он работает для меня, и я надеюсь, что он будет работать и в вашем случае.
Ответ 2
когда необходимо удалить все представления из родительского представления, необходимо вызвать removeAllViews() в контейнере в методе onCreateView() вашего фрагмента.
Вот код:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
container.removeAllViews(); // Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_example, container, false);
}
Ответ 3
Пользовательский интерфейс фрагмента является частью иерархии видов деятельности. Поэтому, если вы создали свои представления в методе onCreateView(), вы раздуваете макет с помощью контейнера ViewGroup. Этот контейнер сохраняет ссылки на ваши фрагменты. Попробуйте переопределить метод onDestroyView() вашего фрагмента и удалить все представления родителя:
@Override
public void onDestroyView() {
//mContainer.removeAllViews();
ViewGroup mContainer = (ViewGroup) getActivity().findViewById(R.id.container);
mContainer.removeAllViews();
super.onDestroyView();
}
Ответ 4
В корневом представлении добавьте clickable = true
и добавьте фоновый цвет (оба в xml) фрагмента, заменяющего текущий фрагмент.
Это просто исправление обходного пути
Ответ 5
Добавьте это к обоим фрагментам родительского макета
android:background="@android:color/white"
.
Тот, который вы заменяете, и тот, который вы замените.