2013-05-03 3 views
2

J'utilise ce menu coulissant dans mon projetAndroid - Comment initialiser le menu glisser une seule fois

https://github.com/jfeinstein10/SlidingMenu

J'ajoute ce menu à toutes mes activités. Et ce menu glissant appelle un Fragment à l'ouverture. Comment empêcher la création de plusieurs fragments pour chaque activité et appelez si Fragment est déjà créé à la pile arrière? Chacune de mes activités étend mon BaseActivity et j'initialise le menu coulissant comme ceci à BaseActivity.

getSupportFragmentManager() 
    .beginTransaction().replace(R.id.detail, new DetailFragment()) 
    .commit(); 

Merci

Répondre

1

Je (au moins) essayer de mettre en œuvre que une activité et remplacer divers fragments dans le cadre de contenu. Vous devez savoir que l'exemple contient différentes approches d'un, vous devez choisir un ;)

donc ayant un fragment menu et le contenu que vous pourriez commencer comme ci-dessous (comparez ResponsiveUIActivity aussi).

public class StartActivity extends SlidingFragmentActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     ... 

     Fragment contentFragment = InitialFragment() 

     getSupportFragmentManager().beginTransaction() 
      .replace(R.id.content_frame, contentFragment).commit(); 

     getSupportFragmentManager().beginTransaction() 
      .replace(R.id.menu_frame, new MenuFragment()).commit(); 

     ... 
    } 

    public void switchContent(final Fragment fragment) { 
     // replace fragment in content frame 
     ... 
    } 

Dans le fragment de menu, vous pouvez créer de nouveaux fragments selon le choix des utilisateurs (comparer BirdMenuFragment):

public class MenuFragment extends ListFragment { 

    @Override 
    public void onListItemClick(ListView lv, View v, int position, long id) { 
     Fragment newContent = null; 

     switch (position) { 
      case 1 : new ThisFragment(); 
        break; 
      case 2 : new ThatFragment(); 
        break; 
      case 3 : new AnotherFragment(); 
        break; 
     } 

     if (newContent != null) switchFragment(newContent); 
    } 

    private void switchFragment(Fragment fragment) { 
     // call StartActivity.switchContent 
     ... 
    } 

Enfin, la colle entre l'activité et le fragment de menu est MenuFragment.switchFragment(Fragment fragment) et StartActivity.switchContent(final Fragment fragment) alors que le menu La méthode fragment appelle la méthode d'activité pour remplacer le fragment de contenu dans la trame de contenu (comparez les classes BirdMenuFragment et ResponsiveUIActivity dans l'exemple). Ceci est juste un aperçu de la façon dont vous pourriez implémenter le SlidingMenu et comment vous pourriez remplacer les fragments dans le cadre de contenu. Il y a bien sûr quelques défis à relever.

En tout cas, j'espère que je pourrais aider un peu ... Cheers!

+0

Pouvez-vous s'il vous plaît expliquer plus :) Qu'est-ce que newFragment ici et comment remplacer fragment dans le cadre de contenu. – dracula

+1

Regardez celui-ci: https://github.com/jfeinstein10/SlidingMenu/blob/master/example/src/com/slidingmenu/example/fragments/ResponsiveUIActivity.java pour 'switchContent()' et celui-ci: https://github.com/jfeinstein10/SlidingMenu/blob/master/example/src/com/slidingmenu/example/fragments/BirdMenuFragment.java pour 'switchFragment()'; en plus j'ai corrigé celui-ci: 'new contentFragment' ci-dessus - il ne devrait pas y avoir de' new'. Que voulez-vous dire par 'newFragment'? Je n'ai pas utilisé ça. – Trinimon

+0

Okey, je comprends plus maintenant. Dans mon code, je n'ai pas de fragments différents. J'ai des activités. Par exemple, ListActivity étend BaseActivity, comment puis-je changer de contenu sur ListActivity? – dracula

Questions connexes