Хост фрагмент, получаващ събития на докосване, когато друг фрагмент е отгоре

Създавам диалогов прозорец на цял екран, както е описано тук Показване на диалогов прозорец на цял екран или като вграден фрагмент.

Така че, когато искам да отворя този диалогов прозорец на цял екран от моя фрагмент, правя:

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