J'ai une activité avec un Framelayout et un BottomNavigationView ... J'ai 4 fragments (A, B, C, D) ... La chose est quand je passe de A à B après avoir cliqué sur l'élément de menu pour charger le fragment B, le fragment A est détruit ... J'ai ajouté un message Log sur toutes les méthodes de callback (OnAttach, OnCreate, OnCreateView ..... etc) impliquées dans le cycle de vie Fragment et onDestroyView est toujours appelé quand je change de fragments ... Alors, quand je reviens à un fragment déjà ouvert, onCreateView est appelé à nouveau ..Les fragments sont recréés sur l'élément de modification bottomnavigationview cliquez sur
Voilà ma classe d'activité:
public class Home extends AppCompatActivity
{
private BottomNavigationView.OnNavigationItemSelectedListener
mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item)
{
Fragment fragment = null;
Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
switch (item.getItemId())
{
case R.id.navigation_a:
if (!(currentFragment instanceof FragmentA))
fragment = FragmentA.newInstance();
break;
case R.id.navigation_b:
if (!(currentFragment instanceof FragmentB))
fragment = FragmentB.newInstance();
break;
case R.id.navigation_c:
if (!(currentFragment instanceof FragmentC))
fragment = FragmentC.newInstance();
break;
case R.id.navigation_d:
if (!(currentFragment instanceof FragmentD))
fragment = FragmentD.newInstance();
break;
}
if (fragment != null) {
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment).commit();
return true;
}
return false;
}
};
//TODO Handle life-cycle methods when switching between fragments
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction()
.add(R.id.fragment_container, FragementA.newInstance())
.commit();
fm.popBackStack();
BottomNavigationView navigation = findViewById(R.id.navigation); navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
}
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK)
{
moveTaskToBack(true);
return true;
}
return false;
}
}
J'aimerais savoir ce qui me manque ici ... Merci d'avance
@Claude ... L'avez-vous compris? – GvSharma
@GvSharma .... Je suis vraiment désolé pour mon retard de réponse mate !! ... En fait, j'ai utilisé un viewpager à l'intérieur .. Je n'ai pas eu le temps de tester les idées proposées ci-dessous car j'étais dans une hâte .. .Mais je pense que l'ajout du fragment au backstack résout définitivement le problème ... –