/ / Como fazer com que um fragmento seja substituído por um fragmento específico quando o botão Voltar for pressionado - java, android, android-studio, fragmento, pilha traseira

Como tornar o fragmento substituído por um fragmento específico quando o botão de voltar pressionado - java, android, android-studio, fragmento, back-stack

Eu tenho um aplicativo que contém uma gaveta de navegaçãoum dos fragmentos é o fragmento inicial. Quero que o aplicativo quando o botão voltar pressionado em outros fragmentos vá para o fragmento inicial, por exemplo, se o usuário pressionou fr1, depois fr2 e fr3, quero que ele volte ao botão home ( onde fr1,2,3 são os fragmentos da gaveta de navegação e observe que há outros fragmentos no aplicativo. Não quero que eles sejam para a casa quando o botão Voltar for pressionado)

Respostas:

1 para resposta № 1

Se você tiver vários fragmentos no backstack, não o alcançará apenas por popBackStack() pois apenas inverte uma última operação. Por exemplo, se você tiver 3 fragmentos (casa, fr1, fr2), primeiro você chegará a fr2 e só então a casa. Se quiser chegar ao fragmento de casa diretamente no BackPress (), substitua o que você tem atualmente com sua casa. fragmento.

    @Override
public void onBackPressed() {
int stackCount = getFragmentManager().getBackStackEntryCount();
if (stackCount == 1) {
super.onBackPressed(); // if you don"t have any fragments in your backstack yet.
} else {
// just replace container with fragment as you normally do;

FragmentManager fm = getFragmentManager();
fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);//clear backstackfirst and then you can exit the app onbackpressed from home fr
FragmentTransaction transaction = fm.beginTransaction();
transaction.replace(R.id.container, new HomeFragment());
transaction.commit();
}
}

EDITAR: Como verificar o fragmento visível atual

Fragment f = getFragmentManager().findFragmentById(R.id.container);
if (f instanceof HomeFragment) {
//do smth
}

1 para resposta № 2

Você pode substituir o método onBackPressed ()dentro de sua atividade e insira seu código de transação de fragmento. Não sei exatamente sua operação, então abaixo escrevi um exemplo genérico que você pode usar:

@Override
public void onBackPressed() {
int count = getFragmentManager().getBackStackEntryCount();
if (count == 0) {
super.onBackPressed();
//additional code
} else {
getFragmentManager().popBackStack();
}
}