Фрагмент хоста, получающий сенсорные события, когда другой фрагмент находится сверху

Я создаю полноэкранный диалог, как описано здесь Показ диалога в полноэкранном режиме или как встроенный фрагмент.

Поэтому, когда я хочу открыть этот полноэкранный диалог из своего фрагмента, я делаю:

FragmentTransaction transaction = getActivity()
        .getSupportFragmentManager()
        .beginTransaction();

transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);

transaction.add(android.R.id.content, newFragment)
           .addToBackStack(null)
           .commit();

Однако, кажется, есть одна проблема с этим. Когда я нажимаю на экран, не только фрагмент диалога получает события касания, но и нижележащий фрагмент хоста. Так бывает, что при тапе вокруг в хост-фрагменте запускается действие.

Почему это происходит? Фрагмент хоста не должен получать события касания!?

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


person Upvote    schedule 17.07.2014    source источник
comment
Аналогично stackoverflow.com/questions/10389620/   -  person Shadesblade    schedule 18.07.2014


Ответы (1)


Поэтому, когда я хочу открыть этот полноэкранный диалог из своего фрагмента, я делаю

Это не имеет ничего общего с диалогом. Единственный способ, которым DialogFragment ведет себя как диалог, — это если вы вызываете show().

Почему это происходит?

Вы добавили фрагмент в тот же контейнер, что и другой существующий фрагмент. Следовательно, виджеты обоих фрагментов находятся в той же иерархии представлений, что и дочерние элементы одного и того же контейнера — например, вы увидите это в представлении иерархии. Не существует понятия «фрагмент хоста».

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

Я бы не ожидал, что это сломает задний стек. Нажатие НАЗАД должно отменить транзакцию и восстановить любой фрагмент, находящийся в этом контейнере в момент, когда вы commit() завершили транзакцию.

person CommonsWare    schedule 17.07.2014