0

我正在製作一個具有導航抽屜的應用程序。在這些片段中可以去其他活動。如果我點擊後退按鈕,我想返回到導航抽屜的當前片段。例如,我有一個片段消息,然後單擊指定聊天中的片段,以便我會看到詳細信息。然後我想再回到消息片段。我正在考慮使用片段後臺堆棧,但我不確定是否有正確的方法來做到這一點。這是我的代碼,我如何在導航抽屜中創建碎片。Android - 從活動的片段之間的導航

Fragment fragment = null; 
    Class fragmentClass = null; 
    android.support.v4.app.FragmentManager fm = getSupportFragmentManager(); 
    switch (menuItem.getItemId()) { 
     case R.id.nav_profile: 
      fragmentClass = HomeFragment.class; 
      break; 
     case R.id.nav_inbox: 
      fragmentClass = ChatFragment.class; 
      break; 
     case R.id.nav_map: 
      fragmentClass = MapFragment.class; 
      break; 
     case R.id.nav_dog_breed: 
      fragmentClass = DogBreedsFragment.class; 
      break; 
     case R.id.nav_reminder: 
      fragmentClass = ReminderFragment.class; 
      break; 
     case R.id.nav_favourite_dog_breeds: 
      fragmentClass = FavouriteDogBreedsFragment.class; 
      break; 
     case R.id.nav_help: 
      Intent intent = new Intent(MainActivity.this, HelpActivity.class); 
      startActivity(intent); 
      finish(); 
      break; 
     case R.id.nav_settings: 
      Intent intent2 = new Intent(MainActivity.this, SettingsActivity.class); 
      startActivity(intent2); 
      finish(); 
      break; 
     case R.id.nav_logout: 
      ((FirebaseApplication) getApplication()).signOutUser(this); 
      break; 
     default: 
      fragmentClass = HomeFragment.class; 

    } 

    try { 
     fragment = (Fragment) fragmentClass.newInstance(); 
    } catch (Exception e) { 
     Log.e(TAG, "Failed to obtain the fragment"); 

    } 

    if (fragment != null && fragmentClass != null) { 
     fragmentManager.beginTransaction().replace(R.id.content_main, fragment).commit(); 
    } 

例如,在ChatDetailActivity我需要去ChatFragment

@Override 
public void onBackPressed() { 
    // here I would need to return to the current fragment 
} 

感謝您的任何意見

+0

分享一些代碼 –

回答

0

片段堆棧中是要走的路。將你的片段替換事務添加到backstack中,所以當你按下後退按鈕時,你將返回到你所在的片段。

fragmentManager.beginTransaction() 
    .replace(R.id.content_main, fragment) 
    .addToBackStack(null) 
    .commit(); 

如果你想啓動從抽屜式導航的活動後返回到相同的片段,則需要在啓動活動之前保存當前片段的名稱(以及可能的狀態)。當導航抽屜活動恢復時,請檢查任何保存的狀態並將其恢復。

+0

如果我理解正確,我必須在主要活動內保存片段的名稱,其中是抽屜式導航器。我怎樣才能做到這一點? – user3637775

+0

@ user3637775你可以使用'onSaveInstanceState()' – Rohan