2016-05-12 12 views
1

Ich benutze Navigation Schublade in meiner App, jedes Element in der Schublade startet ein Fragment. Wenn ein Fragment angezeigt wird und die Zurück-Schaltfläche gedrückt wird, möchte ich, dass die Aktivität das erste Fragment startet.Wie gehe ich glatt zum ersten Fragment auf Backpress

Um expatiate, Wenn ich AbtFragment oder ContaFragment betrachtend bin und die Zurück-Taste gedrückt wird, möchte ich die Tätigkeit HomeFragment zu starten oder gehen Sie zurück.

Teil meiner Tätigkeit

public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     id = item.getItemId(); 

     Fragment fragment = null; 

     if (id == R.id.menu_home) { 
      fragment = new HomeFragment(); 
     } 

     if (id == R.id.about_blog) { 
      fragment = new AbtFragment(); 


     } else if (id == R.id.nav_contri) { 
      fragment = new ContFragment(); 

     } else if (id == R.id.nav_contact) { 
      fragment = new ContaFragment(); 

     } else if (id == R.id.nav_privy) { 
      fragment = new PageFragment(); 

     } else if (id == R.id.nav_advert) { 
      fragment = new PageFragment(); 

     } 

     FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
     ft.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right, android.R.anim.slide_in_left, android.R.anim.slide_out_right); 
     ft.replace(R.id.content_frame, fragment, "visible_fragment"); 
     ft.addToBackStack(null); 
     ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
     ft.commit(); 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
    } 

    @Override 
     public void onBackPressed() { 
      DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
      if (drawer.isDrawerOpen(GravityCompat.START)) { 
       drawer.closeDrawer(GravityCompat.START); 
      } else { 
       super.onBackPressed(); 
      } 
      if (getSupportFragmentManager().getBackStackEntryCount() >= 1) { 
       navigationView.setCheckedItem(R.id.menu_home); 
       navigationView.getMenu().performIdentifierAction(R.id.menu_home, 0); 
      } 

     } 

Von onBackPressed, ich für die Anzahl der Fragment in Backstack bin Überprüfung und dann starten HomeFragment wenn es größer oder gleich eins ist, aber das funktioniert nicht richtig. Zum Beispiel, wenn ich AbtFragment und dann ContFragment, und ich drücken Sie die Zurück-Taste, AbtFragment wird zunächst Flimmern auf dem Bildschirm vor HomeFragment wird beginnen gezeigt.

Bitte, wie korrigiere ich das?

Hinweis: HomeFragment ist der Standard frgament daher ist es standardmäßig gestartet ist, wenn die Aktivität gestartet wird.

+0

addToBasckStack(). füge das HomeFragment unter deinem fragmentManager.replace() Code hinzu –

+0

@RusheelJain: Ich verstehe dich nicht. – X09

Antwort

0

Beispiel

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { 

NavigationView navigationView = null; 
Toolbar toolbar = null; 
FragmentManager fragmentManager = getSupportFragmentManager(); 

@Override protected void onCreate(Bundle savedInstanceState) { 

super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 

//set initial fragment to 'new' instead 
addFragment(new NewFragment(), true); 

//Set the toolbar 
toolbar = (Toolbar) findViewById(R.id.toolbar); 
setSupportActionBar(toolbar); 

//Set navigation drawer 
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
drawer.setDrawerListener(toggle); 
toggle.syncState(); 
navigationView = (NavigationView) findViewById(R.id.nav_view); 
navigationView.setNavigationItemSelectedListener(this); 
} 

@Override public void onBackPressed() { 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 

    if (drawer.isDrawerOpen(GravityCompat.START)) { 
    drawer.closeDrawer(GravityCompat.START); } 
    else { 
    //put your alert dialog code here // 
    if (getFragmentManager().getBackStackEntryCount() == 0) ... 
    } 
} 

@SuppressWarnings("StatementWithEmptyBody") 
@Override 
public boolean onNavigationItemSelected(MenuItem item) { 

// Handle navigation view item clicks here. 
int id = item.getItemId(); 
// Replace these with your own menu items 
switch (id) { 
    case R.id.nav_start: 
     addFragment(new StartFragment(), true); 
     break; 
    case R.id.nav_save: 
     addFragment(new SaveFragment(), true); 
     break; 
    case R.id.nav_raw: 
     addFragment(new RawFragment(), true); 
     break; 
    case R.id.nav_gyroscope: 
     addFragment(new GyroscopeFragment(), true); 
     break; 
} 

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
drawer.closeDrawer(GravityCompat.START); 
return true; 
} 

public void addFragment(Fragment fragment, Boolean addToBackStack) { 
    if (fragment != null) { 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.replace(R.id.fragment_container, fragment, fragment.getClass().getSimpleName()) .addToBackStack(null) .commit(); 

    } 
} 
} 
+0

Danke, aber bitte schauen Sie sich meinen Code noch einmal an, ich benutze 'id' nicht' position' und ich habe nicht verstanden, was Sie mit "where displayView() es ist die Ansicht, die Sie wünschen sehen" – X09

+0

ok bitte überprüfen Sie neu Änderungen – UclidesGil

+0

"und dann definieren Sie eine Methode allowBackPressed mit der Logik zu erlauben, gedrückt oder nicht", können Sie pleassssssse, diese Logik in die Antwort? – X09

Verwandte Themen