Макеты фрагментов перекрываются на popBackStack - PullRequest
0 голосов
/ 01 сентября 2018

Фрагмент А

 View rootView = inflater.inflate(R.layout.fragment_a, container, false);
        TextView tvTest = (TextView) rootView.findViewById(R.id.tvTest);
        tvTest.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.container, new FragmentB()).addToBackStack("tag").commit();            }
        });
        return rootView;

Фрагмент Б

 View rootView = inflater.inflate(R.layout.fragment_b, container, false);
    TextView tvTest = (TextView) rootView.findViewById(R.id.tvTest);
    tvTest.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.container, new FragmentC()).commit();            }


    });
    return rootView;

Фрагмент С

View rootView = inflater.inflate(R.layout.fragment_c, container, false);
TextView tvTest = (TextView) rootView.findViewById(R.id.tvTest);
tvTest.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        getActivity().getSupportFragmentManager().popBackStack();
    }
});
return rootView;
}

При нажатии на tvTest в Фрагмент C я вижу, что расположение фрагмента A и фрагмента C перекрывается друг с другом

Expectecd Behaviour- При замене Фрагмента C на Фрагмент B Фрагмент B уничтожается, поскольку он является транзакцией замены без addToBackStack (). Теперь при использовании popBackStack () во Фрагменте C Фрагмент C должен быть уничтожен, а Фрагмент A должен быть четко виден.

1 Ответ

0 голосов
/ 01 сентября 2018

Это из-за того, как работает FragmentManager backstack. Это стек FragmentTransaction , а не Fragment.

Ваш код имеет следующие транзакции.

  • A -> B (транзакция добавлена ​​в задний стек)
  • B -> C

C затем выталкивает задний стек (он переворачивает последнюю транзакцию в стеке (A -> B)) - который становится B -> A. Это приводит к тому, что A и C видимы.

...