簡體   English   中英

使用導航抽屜進行片段導航

[英]Fragment Navigation with Navigation Drawer

我的Android應用實際上有一個小問題。

我的應用程序包含一個導航抽屜,用於在應用程序內部進行導航。 例如

導航抽屜:

  1. 概觀
  2. 搜索
  3. 用戶
  4. 東西

當應用啟動時,我將加載概述片段。 如果用戶單擊其他項目,我將使用以下方式更改片段:

final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.frame_container, fragment, TAG);
transaction.addToBackStack(null);
transaction.commit();

現在的問題是,例如,當用戶從1> 2> 4> 3切換並按下返回鍵時,這只會使他返回一個片段。 3> 4> 2> 1

所以我添加了代碼,這將使他回到每個Backpress的Fragment 1。

public boolean onKeyDown(int keyCode, KeyEvent event) {
    int exit = 0;


    if (keyCode == KeyEvent.KEYCODE_BACK) {


        getFragmentManager().popBackStack();
        FragmentManager fm = getSupportFragmentManager();
        Fragment fragment = new Overview();
        fm.beginTransaction().add(R.id.frame_container, fragment).addToBackStack("fragBack").commit();
        return false;
    }
    return false;
}

好的,首先還不錯,但是現在我在“更深層次”上添加了更多片段,但是在回壓時它們不應該回到片段1。

例如

  1. 概述(主要片段)
  2. 搜索(返回鍵返回到片段1)
  3. 用戶(返回鍵返回到片段1)
  4. 填充(返回鍵返回到片段1)

4.1詳細信息(返回鍵返回到片段4。填充)<4.1.1更多詳細信息(返回鍵返回到片段4.1)。

如果有人有一個想法,我將如何在我的應用程序中處理導航,那就太好了。

格爾茨

您的代碼是正確的,需要更改邏輯。 每當您離開NavigationDrawer時,首先都要使用此代碼清除堆棧中的所有片段

private void clearBackStack() {
    FragmentManager manager = getSupportFragmentManager();
    manager.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
} 

然后,將相應的selected(1或2或3)片段添加到堆棧中。

private void navigateToFragment(Fragment fragment, String TAG){
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.frame_container, fragment, TAG);
    transaction.addToBackStack(null);
    transaction.commit();
}

當您像2-> 2.1-> 2.2那樣深入時,在反壓時您將返回2.2-> 2.1-> 2。 無需覆蓋onKeyDown()方法並再次添加片段

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM