Ignorar alguns fragmentos noBackPressed
Eu sou bastante novo com fragmentos de Android, por favor, tenha paciência comigo.
Eu tenho um monte de fragmentos usando uma única atividade como host.
Na minha opinião, meus fragmentos são agrupados por seções, embora ainda sejam modulares / reutilizáveis por código. Considere este cenário desejado:
Frag1 -> (Pressione Avançar) -> Frag2 -> (Pressione Avançar) -> Frag3 -> (Pressione Voltar) -> Frag1
Depois de passar por uma série de fragmentos, eu gostaria de pular alguns fragmentos anteriores (neste cenário, pule o Frag 2) ao pressionar o botão Voltar.
No entanto, no meu código atual, meu problema é que, mesmo voltando ao Frag1, o Frag3 não desaparece da tela. O que acontece é que o Frag1 e o Frag3 ficam visíveis um sobre o outro.
Aqui estão meus trechos de código relevantes:
Fragmento de código para criar Frag1
@Override
public void onNavigationDrawerItemSelected(int position) {
// update the main content by replacing fragments
// init the fragment (with a default fragment, not null)
Fragment fragment = PlaceholderFragment.newInstance(position + 1);
// Position number from navigation sidebar starts from 0.
// Since position starts from 0, add 1 to match section number
// as implemented in {@link #onSectionAttached()}
switch(position) {
case 0:
fragment = PlaceholderFragment.newInstance(position + 1);
break;
case 1: // Frag1 case
fragment = new AddPointsFragment().newInstance(position + 1, "");
break;
default:
break;
}
// update the main content by replacing fragments
FragmentManager fragmentManager = getFragmentManager();
// clear all fragments from previous section from the back stack
fragmentManager.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
// replace all currently added fragments in container and replace with the new fragment
fragmentManager.beginTransaction()
.replace(R.id.container, fragment)
.commit();
}
Fragmento de código para criar Frag2
public void onEnterButtonFragmentInteraction(int sectionNumber, String cardNo) {
// TODO: Add point for given card number
int points = 5; //sample points
AddPointsSuccessFragment addPointsSuccessFragment =
new AddPointsSuccessFragment().newInstance(sectionNumber, cardNo, points);
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.container, addPointsSuccessFragment)
.addToBackStack(null)
.commit();
}
Fragmento de código para criar Frag3
public void onOkButtonFragmentInteraction(int sectionNumber, String cardNo, int points) {
RedeemRewardFragment redeemRewardFragment =
new RedeemRewardFragment().newInstance(sectionNumber, cardNo, points);
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.container, redeemRewardFragment);
fragmentTransaction.commit();
}
Minha solução atual para isso é adicionando.addToBackStack(null)
na criação do Frag3 e na execução desse código
public void onBackButtonFragmentInteraction() {
this.onBackPressed(); // simulate pressing of activity back button
FragmentManager fragmentmanager = getFragmentManager();
fragmentmanager.popBackStack(); // pop Frag2 from back stack
}
logo após chamar o método onBackPressed (). Infelizmente, essa solução alternativa é feia porque há uma aparência de fração de segundo do Frag2 antes de ir para o Frag1.