2013-05-20 3 views
19

У меня есть вкладка + ViewPager макет, и на одной из этих вкладок у меня есть вид списка. Когда я заменяю этот фрагмент списка на 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 в представлении.

+0

попробуйте дать цвет bg фрагменту, содержащему макет –

+1

Никто не может вам помочь, если вы не предоставите код, который вы использовали. Кроме того, пожалуйста, не зафигируйте заголовок своего вопроса на Android, достаточно тега внизу. – Luksprog

+2

Убедитесь, что вы не вызываете FragmentTransaction.add(), когда вы должны вызвать FragmentTransaction.replace(). – Krylez

ответ

6

Вместо R.id.container введите id фрагмента следующим образом: ((ViewGroup)getView().getParent()).getId(). Фактически он не заменяет фрагмент, а предыдущий макет i.e FrameLayout. Он работает для меня, и я надеюсь, что он будет работать и в вашем случае.

+3

Метод getview не определен –

+2

getId () не определено –

+0

getView(). getParent()). getId() no метод как таковой. пожалуйста, перейдите по ссылке для достижения: http: //stackoverflow.com/questions/16643167/previous-fragment-visible-under-the-new-fragment/42113563#42113563 – taranjeetsapra

3

Пользовательский интерфейс фрагмента является частью иерархии видов деятельности. Поэтому, если вы создали свои представления в методе onCreateView(), вы раздуваете макет с помощью контейнера ViewGroup. Этот контейнер сохраняет ссылки на ваши фрагменты. Попробуйте переопределить onDestroyView() метод вашего фрагмента и удалить все виды из родителей:

@Override 
public void onDestroyView() { 
    //mContainer.removeAllViews(); 
    ViewGroup mContainer = (ViewGroup) getActivity().findViewById(R.id.container); 
    mContainer.removeAllViews(); 
    super.onDestroyView(); 
} 
+7

Фрагмент не должен управлять родителем, он несет ответственность за управление своими дочерними элементами , –

+1

как иронично! – lionelmessi

0

В представлении корня добавить clickable = true и добавить цвет фона (как в XML) фрагмента, заменяющего текущий фрагмент , Его просто исправить для обходного

-1

, когда необходимо удалить все представления из родительского вида необходимо вызвать removeAllViews() на контейнере в вашем onCreateView() метод вашего фрагмента.

Вот код:

общественное мнение onCreateView (LayoutInflater инфлятор, ViewGroup контейнер, Bundle savedInstanceState) { container.removeAllViews(); // Надуть макет для этого фрагмента return inflater.inflate (R.layout.fragment_example, container, false); }

+0

Этот вопрос более 3 лет, и он уже был решен – SquiresSquire

Смежные вопросы