Как удалить фрагмент? - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть фрагмент, который расширяет DialogFragment в Activity. Я показываю это, когда нажимаю на кнопку:

 FragmentManager fragmentManager = getSupportFragmentManager();
 FragmentTransaction ft = fragmentManager.beginTransaction();
 ft.add(TabsFragment.newInstance(), "Fragment");
 ft.addToBackStack(null);
 ft.commit();

И в методе onDismiss во Fragment я удаляю его следующим образом:

FragmentManager fragmentManager = getChildFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
if (fragmentManager.getBackStackEntryCount() > 0)
    fragmentManager.popBackStack();
fragmentTransaction.commit();

Итак, мой проблема в том, что когда я дважды быстро нажимаю на кнопку, появляются два фрагмента. Я заменяю эти коды на Activity:

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();
if (fragmentManager.getBackStackEntryCount() == 0) {
    ft.add(TabsFragment.newInstance(), "Fragment");
    ft.addToBackStack("Tabs");
    ft.commit();
}

Но при этом фрагмент отображается только один раз. Когда я нажимаю на кнопку getBackStackEntryCount равен 0, фрагмент появляется. Когда фрагмент распущен и снова нажмите кнопку, getBackStackEntryCount равен 1, хотя я удаляю фрагмент в методе onDismiss . Есть ли другой способ удаления фрагмента и отключения getBackStackEntryCount ?

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Хорошо, если вы не хотите делать это грязно, тогда ... 1. Используйте популярные библиотеки, такие как rx. Потому что это более понятный способ написания кода.

implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'io.reactivex.rxjava2:rxjava:2.2.12'
Использование https://github.com/JakeWharton/RxBinding Это помогает вам работать с вашими представлениями более комфортно.

Пример:

RxView.clicks(yourButton)
            .throttleFirst(1000, TimeUnit.MILLISECONDS)
            .subscribe (click -> {your code})

Где RxView.clicks - это ваш onClickListener, .throttleFirst - это ваша задержка .subscribe - это ваше действие клика

Вы можете сделать это лучше. Просто оберните некоторые части в методы =)

Правка. Почему так лучше? Потому что это помогает решить основную проблему (быстрые клики). Это не помогает решить последствия.

0 голосов
/ 09 апреля 2020

Попробуйте это;

fragmentTransaction.hide(fragment1);
fragmentTransaction.commit();
...