2016-03-19 4 views
0

Ich bin sehr neu in Android und versuchen, meine iPhone-App auf Android zu konvertieren. Ich versuche, zwischen Fragmenten zu navigieren, und nachdem ich von Fragment A nach B navigiert habe, möchte ich mit dem Zurück-Knopf von Fragment B nach A zurückkehren. Ich habe Nachforschungen angestellt, konnte es aber nicht gut verstehen. Unten im Code habe ich eine Navigationsleiste, in der ich zwischen Fragmenten navigiere. Nachdem ich Follower angeklickt habe, möchte ich mit dem Zurück-Button zum News-Feed zurückkehren.popBackStack und addToBackStack in Android

//this is the navigation drawer part  
if (id == R.id.my_archive_drawer) { 

       myArchiveFragment fragment = new myArchiveFragment(); 
       android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
       fragmentTransaction.replace(R.id.fragment_container, fragment); 
       fragmentTransaction.addToBackStack("newsFeedFragment"); 
       fragmentTransaction.commit(); 

      } else if (id == R.id.followers_drawer) { 

       followedFollowersFragment fragment = new followedFollowersFragment(); 
       android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
       fragmentTransaction.replace(R.id.fragment_container, fragment); 
       fragmentTransaction.addToBackStack("newsFeedFragment"); 
       fragmentTransaction.commit(); 

      } 
//this is the navigation drawer part 



//this is the on create part part 
     newsFeedFragment fragment = new newsFeedFragment(); 
     android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
     fragmentTransaction.replace(R.id.fragment_container, fragment); 
     fragmentTransaction.commit(); 
//this is the on create part part 


//onbackpreseed part 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
     } else { 
      getFragmentManager().popBackStack("newsFeedFragment"); 
     } 
    } 
//onbackpressed part 

Antwort

1

Der addToBackStack bedeutet, das Fragment in den Stapel zu legen. Das bedeutet, dass Sie, wenn Sie Fragmentnachrichten an Fragmentfolger senden, das Fragment dem Stapel hinzufügen. Wenn Sie also zurückgehen, kehren Sie zum Nachrichtenfragment zurück.

diesen Code Versuchen:

followedFollowersFragment fragment = new followedFollowersFragment(); 
android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
fragmentTransaction.replace(R.id.fragment_container, fragment); 
fragmentTransaction.addToBackStack(null); 
fragmentTransaction.commit(); 

Und dann in Ihrem onBackPressed() entfernen Sie die popbackstack(), denn wenn man die die Zurück-Taste onBackPressed aufrufen, klicken Sie bereits die Anhänger Fragment zu entfernen. So ist die onBackPressed() wie folgt sein sollte:

@Override 
public void onBackPressed() { 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } else { 
     super.onBackPressed(); 
    } 
} 

Für weitere Informationen zu dieser 2 Methoden können Sie lesen here

+0

Vielen Dank JpCrow, es funktionierte :) was ist, wenn ich die Zurück-Taste deaktivieren möchten wenn ich im news_freed-Fragment bin, das im "on create" -Teil erstellt wurde, das Startfragment? – saner

+0

In diesem Fall sollten Sie die onBackPressed() überschreiben und nicht die super.onBackPressed(); Nur in diesem Fall sollten Sie eine Flagge oder etwas hinzufügen – JpCrow

Verwandte Themen