Отключить onBackPressed только в ОДНОМ фрагменте - Android - PullRequest
0 голосов
/ 28 декабря 2018

Я безуспешно пытаюсь отключить клавишу возврата только в одном фрагменте, в первом.Я сделал переопределение метода onBackPressed в Activity, содержащего фрагмент, со следующим:

@Override
public void onBackPressed() {
    if (this.fragmentManager.getBackStackEntryCount() > 1) {
        //getFragmentManager().popBackStack();
        super.onBackPressed();
    } else {
        //super.onBackPressed();
    }
}

Итак, он работает отлично. НО когда я заканчиваю весь путь фрагментов, у последнего фрагмента у меня есть кнопка, которая возвращает меня к первому фрагменту.Я вставлю код, где я загружаю этот фрагмент снова.

for (Fragment fragment1:getSupportFragmentManager().getFragments()) {
        getSupportFragmentManager().beginTransaction().remove(fragment1).commit();
    }

    MontoFragment montoFragment = new MontoFragment();
    cargarFragment(montoFragment);

А вот и метод "cargarFragment ()"

public void cargarFragment(Fragment fragment){
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.setCustomAnimations(R.anim.animation_slide_in,R.anim.animation_slide_out);
    fragmentTransaction.replace(R.id.layoutContenedorFragments,fragment);
    fragmentTransaction.addToBackStack(null).commit();
}

После того, как я завершу все фрагменты и вернусь кпервый с этим, мой onBackPressed метод больше не работает, потому что this.fragmentManager.getBackStackEntryCount()> 1 сейчас равен 5 или 6, я не помню сейчас.И это позволяет включить клавишу возврата.

Так что я не знаю, что делать.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Я просто добился этого с помощью этого кода

@Override
public void onBackPressed() {
    Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.layoutContenedorFragments);
    if (currentFragment instanceof MontoFragment){

    }else{
        super.onBackPressed();
    }
}

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

Я смотрю, что это прекрасно работает

0 голосов
/ 28 декабря 2018

попробуйте использовать popBackStack, замените кодовый блок:

for (Fragment fragment1:getSupportFragmentManager().getFragments()) {
        getSupportFragmentManager().beginTransaction().remove(fragment1).commit();
    }

    MontoFragment montoFragment = new MontoFragment();
    cargarFragment(montoFragment);

на

 void popFragments(int number) {
        for (int i = 0, i < number, i++) {
            supportFragmentManager.popBackStackImmediate()
        }
    }

number вот количество фрагментов, которые вы хотите удалить, например: мыесть фрагмент 1,2,3,4, поэтому, когда мы находимся во фрагменте 4 и хотим вернуться к фрагменту 1, число будет равно 3.

...