Подтвердить что ты не робот

Предыдущий фрагмент, видимый под новым фрагментом

У меня есть вкладка + 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 в представлении.

4b9b3361

Ответ 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".

Тот, который вы заменяете, и тот, который вы замените.