2017-05-04 4 views
0

Je suis en train d'ajouter une fonctionnalité l'application de mon équipe qui permettra à l'utilisateur de choisir entre 2 écrans d'accueil différents. Notez que ces deux écrans ont des sensations très différentes.Comment faire pour basculer le fragment de la maison entre deux fragments différents en fonction des préférences de l'utilisateur

Ma configuration actuelle pour ceci est d'avoir 2 fragments distincts Home1Fragment et Home2Fragment qui étendent tous les deux une classe abstraite appelée HomeFragment. L'utilisateur utilisera Home1Fragment par défaut jusqu'à ce qu'ils modifient la préférence dans la page des paramètres.

J'ai ces deux fragments implémentés et les deux fonctionnent correctement s'ils agissent seuls comme un écran d'accueil.

Mon problème réside lorsque j'essaie de les passer d'un fragment à un autre. J'ai essayé de cela via

@Override 
public void onBackPressed() { 
    FragmentManager fragmentManager = getFragmentManager(); 

    if(fragmentManager.getBackStackEntryCount() > 1) { 
     fragmentManager.popBackStackImmediate(); 

     int option = getSharedPreferences('**hidden**', MODE_PRIVATE).get('home_screen_option', 0); 
     Fragment fragment = fragmentManager.findFragmentById(R.id.content); 
     if(fragment != null && fragment instanceof HomeFragment) { 
      if(f instanceof Home1Fragment && option == HOME_2) { 
      f = new Home2Fragment(); 
      } else if (f instanceof Home2Fragment && option == HOME_1) { 
      f = new Home1Fragment(); 
      } 
     } 
    } else { 
     finish(); 
    } 
} 

Il peut y avoir des fautes de frappe dans le code ci-dessus parce que je l'ai écrit à la volée sans le code réel devant moi.

+0

Quel est le problème avec votre code? le fragment n'est pas montré? –

Répondre

0

Vous ne définissez pas réellement le nouveau fragment dans votre code. Mais je choisirais une approche différente qui est basée sur un état sauvegardé (par exemple un paramètre dans les préférences partagées) et est gérée par l'écran d'accueil lui-même (au lieu de manipuler la pile arrière contre laquelle je m'oppose).

Option 1.

S'il vous plaît pense que si votre écran d'accueil peut être un Activity séparé. De cette façon, vous pouvez simplement charger le bon fragment lorsque le Activity démarre en fonction d'une valeur stockée dans SharedPreferences.

Option 2.

A peu près la même chose, juste en utilisant un fragment imbriqué. Laissez votre écran d'accueil être un Fragment et ajoutez un conteneur pour les fragments enfants dans sa mise en page. Utilisez ensuite le gestionnaire de fragments enfant pour charger la vue correcte en conséquence.