2014-04-26 27 views
2

我有具有以下流的應用:的Android側菜單導航 - 處理片段

enter image description here

的一點是,我們有一個單一Activity和滑動菜單,從其中用戶可以選擇幾個頂級片段之一(我頂級的意思是當用戶按Back鍵時,應用程序退出)。

從這些片段中,用戶可以導航到其他片段(例如論壇主題 - >主題詳情 - >海報個人資料 - >海報的朋友 - >朋友的個人資料),其中後退鍵預計將用戶返回到保存的前一個片段的狀態(例如恢復滾動位置等)。

在這種情況下,我使用:

void addFragment(Fragment f) { 
    //add fragment in a transaction, so back key does its thing 
    getSupportFragmentManager().beginTransaction().addToBackStack(null) 
      .add(R.id.fragment_container, f).commit(); 
} 

如果用戶打開這些片段的側面菜單並選擇另一個頂級片段,然後將整個背部堆棧將被新的片段會被替換(而當用戶按壓背部,應用程序退出)

在這種情況下,我使用:

void replaceFragment(Fragment f) { 
    //remove all fragments and add a top-level one 
    getSupportFragmentManager().popBackStackImmediate(null, 
      FragmentManager.POP_BACK_STACK_INCLUSIVE); 
    getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, f).commit(); 
} 

這被認爲是一個良好的導航?在iOS應用程序中,每個頂層片段都會記住它自己的背堆棧,但這似乎是一種矯枉過正的行爲,所以銷燬頂層交換機上的後備堆棧就足夠了。

+1

完全以無用的,但我愛你的圖紙! –

回答

0

使用

private final static String TAG_FRAGMENT = "TAG_FRAGMENT"; 

而且

FragmentManager fragmentManager = getSupportFragmentManager(); 
    FragmentTransaction ft = fragmentManager.beginTransaction(); 

ft.replace(R.id.content_frame, new Frag_Yourfrag(), TAG_FRAGMENT); 
ft.addToBackStack(null); 
ft.commit(); 

享受:)

+0

爲什麼?如果我在應用程序中進行更深入的導航時更換碎片,則必須重新創建它們,並且狀態(例如滾動位置)將會丟失後退按鈕 – Axarydax