Фрагмент перекрытия после нажатия кнопки «Назад» - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть три фрагмента (фрагмент A, фрагмент B, фрагмент C).Код переходит от фрагмента A к фрагменту B, а затем фрагмента B к Fragemnt C.

Когда я нажимаю кнопку «Назад», я перехожу от фрагмента C к фрагменту A.

После нажатия кнопки «Назад» фрагмент «А» отображается, но выза ним также виден фрагмент C.

фрагментA

FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction;

ft.repalce(R.id.container, fragmentB)
  .addToBackStack("Null")  
  .commit();

фрагментB

FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction;

ft.repalce(R.id.container, fragmentC)
  .commit();

фрагментC

FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction;

ft.repalce(R.id.container, fragmentC)
  .commit();

При нажатии кнопки возврата Iхотите перейти от фрагмента C к фрагменту A и не отображать фрагмент C на заднем плане

Ответы [ 3 ]

1 голос
/ 17 апреля 2019

В addToBackStack используйте ноль в качестве параметра, а не «Ноль»

FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction;

    ft.repalce(R.id.container, fragmentB)
      .addToBackStack(null)  
      .commit();
0 голосов
/ 17 апреля 2019

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

Решение, которое работает для меня, состоит в том, чтобы перезапустить действие с помощью @Override onBackPressed (), это перезагрузит фрагмент A по умолчанию.

Фрагмент Б

FragmentManger fm = fragmentManager();
FragmentTransaction ft = fm.beginTransaction();
fm.replace(R.id.container, fragmentC, "fragmentC");
.commit();

нажатие кнопки фрагмента C

активность

@Override
public void onBackPressed() {
    if(getSupportFragmnetManager().findFragmnetByTag("fragmentC") !=null) {
        Intent myIntent = new Intent(this, Activity.class);
        startActivity(myIntent);
        finish();
    } else {
        super.onBackPressed();
    }
}

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

0 голосов
/ 17 апреля 2019

вы можете попробовать это при замене фрагмента

Fragment frag=null;
frag=new Navigation_Help();
if(frag!=null){
        FragmentManager fragmentManager=getSupportFragmentManager();
        FragmentTransaction ft=fragmentManager.beginTransaction();
        ft.replace(R.id.sacreenarea,frag);
        //for not to back previous fragment remove next nile
        ft.addToBackStack(null);
        ft.commit();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...