2016-08-16 7 views
1

Wie kann ich onBackPressed() von jedem Fragment auf HomeFragment gehen oder zum vorherigen fragment gehen.Programmgesteuert zum vorherigen Fragment zurückkehren

Hier ist der Code, um das Fragment standardmäßig zu setzen Home Fragment ist geöffnet, wenn die App startet, aber auf der Rückseite drücken App geschlossen. braucht es zu helfen, dank heraus zu lösen dies ist mein MainActivityDrawer Klasse

private Toolbar mToolbar; 
private FragmentDrawer drawerFragment; 
GpsTrackerAlarmReceiver alarm = new GpsTrackerAlarmReceiver(); 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_drawer); 

    mToolbar = (Toolbar) findViewById(R.id.toolbar); 

    setSupportActionBar(mToolbar); 
    getSupportActionBar().setDisplayShowHomeEnabled(true); 

    drawerFragment = (FragmentDrawer) 
    getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer); 
    drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), mToolbar); 
    drawerFragment.setDrawerListener(this); 
    alarm.setAlarm(this); 

    // display the first navigation drawer view on app launch 
    displayView(0); 
} 
     @Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_help) { 
     return true; 
    } 
    if(id == R.id.action_search){ 
     Toast.makeText(getApplicationContext(), "Search action is selected!", Toast.LENGTH_SHORT).show(); 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 
@Override 
public void onDrawerItemSelected(View view, int position) { 
    displayView(position); 
} 
private void displayView(int position) { 
    Fragment fragment = null; 
    String title = getString(R.string.app_name); 
    switch (position) { 

     case 0: 
      fragment = new HomeFragment(); 
      title = getString(R.string.title_home); 
      break; 
     case 1: 
      fragment = new ProfileFragment(); 
      title = getString(R.string.title_profile); 
      break; 
     case 2: 

      fragment = new ContactsFragment(); 
      title = getString(R.string.title_contacts); 
      break; 
     case 3: 
      fragment = new GeoFencFragment(); 
      title = getString(R.string.title_geofence); 
      break; 
     case 4: 
      fragment = new HistoryFragment(); 
      title = getString(R.string.title_history); 
      break; 
     case 5: 
      fragment = new SettingFragment(); 
      title = getString(R.string.title_settimg); 
      break; 
     default: 
      break; 
    } 
    if (fragment != null) { 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     fragmentTransaction.replace(R.id.container_body, fragment); 
     fragmentTransaction.commit(); 
     // set the toolbar title 
     getSupportActionBar().setTitle(title); 
    } 
} 
@Override 
public void onResume() { 
    Log.d(TAG, "onResume"); 
    super.onResume(); 
} 
@Override 
protected void onStop() { 
    super.onStop(); 
}} 
+0

Sie Linie verpasst hinzufügen Fragment Transaktion in Backstack – Ramit

+0

Dank erhalten Können Sie etwas mehr über Fragmenttransaktionen im Backstack erklären? –

+0

Ich denke, Sie haben Zeile fragmentTransaction.addToBackStack (null); in deinem ursprünglichen Code. Bitte erläutern Sie Ihr Problem, was Sie erreichen möchten. Ex du hast ein Hausfragment und du kannst zu Fragment 5 Fragmenten von hier gehen und auf Zurück drücken du willst zurück nach Hause kommen und dann wieder zurück drücken drückst du aus. Dafür müssen Sie onBackPress nicht überschreiben. Es wird automatisch vom System verarbeitet, wenn Sie Transaktionen im Backstack hinzufügen. Bitte korrigieren Sie mich, wenn ich falsch liege. – Ramit

Antwort

0

ich es folgende, indem Sie erreicht Siehe drücken zurück: - 1. Führen Sie keine Transaktion Add-Fragment in zurück Stapel. 2. Beim Zurückdruck prüfen, ob das aktuell angezeigte Fragment nicht das Home-Fragment ist, dann zeigen Sie das Home-Fragment auf andere Weise super.onBackPressd(), um die Aktivität zu schließen.

if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) 
     { 
      mDrawerLayout.closeDrawer(GravityCompat.START); 
     } 
    else if (fragmentManager.findFragmentById(R.id.content_frame_drawer_layout) != homeFragment) 
       { 
        fragmentManager.beginTransaction().replace(R.id.content_frame_drawer_layout, homeFragment).commit(); 

       } 
       else 
       { 
        super.onBackPressed(); 
       } 
+0

danke bro ich bekomme es, können sie erklären, mehr wo ich diesen code in meinem projekt hinzufügen. Ich bin neu so geting Fehler –

+0

Bitte fügen Sie dies in onBackPressed() (entfernen Sie Ihren aktuellen Code). Bitte testen Sie und lassen Sie mich wissen, dass Sie erreichen möchten – Ramit

+0

homeFragment speichert das Haus Fragment. Dies ist eine Klassen-Level-Variable in Ihrer Schubladenaktivität. Stellen Sie den Wert dort ein, wo Sie das Home-Fragment erstellen möchten – Ramit

0

Versuchen Sie, diese

getFragmentManager().beginTransaction(). 
    remove(this).commit(); 

oder popBackStackImmediate()

Verwendung addToBackstack() vor commit() verwenden. In Ihrer Tätigkeit

Wenn Sie das Fragment entfernen möchten, verwenden Sie popBackStackImmediate()

+0

danke ich werde versuchen –

+0

funktioniert nicht bro –

+0

bitte überprüfen Sie noch einmal bearbeitet meine Antwort – SaravInfern

0

dieser Code speichern Tag erste Positionswert von Schublade und speichern Sie in gemeinsam genutzten prefrences dann bekommen diese Postion nicht in onBackPressed dankt allen für die Hilfe

public void onBackPressed() 
{ 
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 
    int fragment_num = sharedPreferences.getInt("pos", 0); 
    if(fragment_num != 0) 
    { 
     displayView(0); 
    } 
    else 
    { 
     super.onBackPressed(); 
    } 
} 
Verwandte Themen