2013-07-22 5 views
1

je, Fragment A qui contient listView - au moment où l'utilisateur clique sur un élément de la vue actuelle sera remplacée par une autre vue qui contient également un listview appelé Fragment B. Fragment A -> B, je parviens à ajouter le fragment A au backstack alors quand l'utilisateur est dans Fragment B, s'il appuie sur le bouton retour, il retournera à Fragment A. Le problème est après que j'appuie de nouveau Fragment A (listView) il montrera juste un écran de banque et je m'attends à ce que Fragment B devrait être montré encore.Android - Fragments pendant Backpress Remise

Fragment A

 lv.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 


       //FragmentActivity activity = getActivity(); 

        String fragMainGroups = "mainGroups"; 

        Fragment videoFragment = new VideoPlayerFragment(); 
        FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
        transaction.replace(R.id.contentFragment, videoFragment, fragMainGroups); 
        transaction.addToBackStack(fragMainGroups); 
        transaction.commit(); 

      } 
     }); 

Modifier

   String fragMainGroups = "mainGroups"; 
      String Groups = "Groups"; 

       Fragment fragment1 = new VideoPlayerFragment(); 


       /*FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
       transaction.replace(R.id.contentFragment, fragment1, fragMainGroups); 
       transaction.addToBackStack(fragMainGroups); 
       transaction.commit(); */ 

       FragmentTransaction ft = getFragmentManager().beginTransaction(); 
       ft.addToBackStack(Groups); 
       ft.add(R.id.contentFragment, fragment1, fragMainGroups); 
       ft.commit(); 

Répondre

0

Comment cela?

transaction.add(R.id.contentFragment, videoFragment, fragMainGroups); 

un supplémentaire rappelant:

vous feriez mieux d'utiliser getSupportFragmentManager, ce sera une meilleure compatibilité.

+0

monsieur, dois-je mettre des codes sur onBackPress ?? – rahstame

+0

J'ai édité ma question ci-dessus. Je reçois toujours le même senario. C'est comme quand je clique sur 'Fragment A', il va ouvrir une fenêtre vide ... 0_T – rahstame

+0

Je peux voir n'importe quel problème dans votre code posté. est un problème dans votre fragement B? – kvh

0

Il est préférable de gérer la pression des boutons à travers votre activité à moins que votre actvity héberge un grand nombre de fragments.Lorsque vous appuyez sur le bouton retour dans votre fragment onBackPressed() méthode de votre activité sera appelée qui peut être surchargée et traitée. Donc, dans votre cas de manipulation bouton retour des fragments peut être fait dans ce way..You peut le mettre à jour en conséquence

MainActvity

 public static boolean isMainActivityShown ; 
    public static boolean isFragment1FromMainActivity=false ; 
    public static boolean isFragment1FromFragment2=false ; 
    public static boolean isFragment2Shown=false ; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     isMainActivityShown=true //inside onCreate method put isMainActivityShown true 
. 
. 
. 
} 
. 
. 
Fragment currentFragment = new Fragment1(); 
isMainActivityShown=false; //when moving to fragment1 
isFragment1FromMainActivity=true; 
frgManager = getFragmentManager(); 
frgManager.beginTransaction().replace(R.id.content_frame, currentFragment) 
             .commit(); 
    @Override 
     public void onBackPressed() { 

      if(isMainActivityShown) 
      { 
       finish(); 
      } 
      else if(isFragment1FromMainActivity) 
      { 
      isMainActivityShown=true; 
      isFragment1FromMainActivity=false; 
       //write the code to move to MainActvity 
      } 
      else if(isFragment1FromFragment2) 
      { 
       //Code to move back to Fragment2 
      Fragment currentFragment = new Fragment2(); 
       isFragment2Shown=true; 
       isFragment1FromFragment2=false; 

       FragmentManager frgManager; 
       frgManager = getFragmentManager(); 
       frgManager.beginTransaction().replace(R.id.content_frame, currentFragment) 
         .commit(); 
      } 
      else if(isFragment2Shown) 
      { //When you are in Fragment 2 pressing back button will move to fragment1 
       Fragment currentFragment = new Fragment1(); 
       isFragment2Shown=false; 
       isFragment1FromFragment2=true; 

       FragmentManager frgManager; 
       frgManager = getFragmentManager(); 
       frgManager.beginTransaction().replace(R.id.content_frame, currentFragment) 
         .commit(); 
      } 

      } 

Fragment1

Fragment currentFragment = new Fragment2(); 

MainActivity.isFragment1FromMainActivity=false; 

MainActivity.isFragment2Shown=true; 
frgManager = getFragmentManager(); 
frgManager.beginTransaction().replace(R.id.content_frame, currentFragment) 
            .commit();