1

管理返回堆棧目前Android應用程序的結構是android系統

Home 
    About us 
    Products 
    product1 
    product2 
    product3 
    Contact us 

是有側面菜單,我可以直接訪問該產品1,我現在的嘗試是加入到堆棧中的每一筆交易,它有一個行爲是很奇怪的

如果我進入這樣的:

Home->product1->About us 

流動是我進入主頁後,我點擊側邊菜單中的產品1,輸入p後在關於我們roduct1頁面點擊側邊菜單

第1次按返回鍵,它會回到產品1,但它應該去家

第二次按後退按鈕,它會去家裏,但它應該去產品頁面

如何處理在這種情況下的後臺堆棧?感謝您的幫助。

回答

2

當您在適當的時間更改碎片和popBackStack以便控制堆棧時,您將需要很聰明。下面是從我的應用程序之一(也處理重新使用在棧現有片段)的例子:

// Idea from http://stackoverflow.com/questions/18305945/how-to-resume-fragment-from-backstack-if-exists 
private void setPrimaryContentFragment(BaseFragment fragment, boolean allowStack){ 
    final String backStackName = fragment.getBackStackName(); 

    final FragmentManager manager = getSupportFragmentManager(); 
    final boolean fragmentPopped = manager.popBackStackImmediate(backStackName, 0); 

    if (!fragmentPopped) { //fragment not in back stack, create it. 
     if (!allowStack && manager.getBackStackEntryCount() > 1) { 
      manager.popBackStack(manager.getBackStackEntryAt(0).getId(), 0); 
     } 

     final FragmentTransaction transaction = manager.beginTransaction(); 
     transaction.replace(R.id.primary_content, fragment); 
     transaction.addToBackStack(backStackName); 
     transaction.commit(); 

     try { 
      manager.executePendingTransactions(); 
     } catch (IllegalStateException exception) { 
      // Move along as this will be resolved async 
     } 
    } 
} 

getBackStack()方法在我的鹼基的片段來實現,並具有一個默認的實現:

public String getBackStackName() { 
    return getClass().getName(); 
} 

allowStack標誌用於控制在堆棧中是否有多個條目。

就用戶直接導航到詳細信息頁面插入產品片段而言,您可能需要這樣做。即:執行產品替換,然後替換產品詳細信息。 希望此代碼段和鏈接的帖子將幫助您想出您需要的解決方案。

0

硬後退按鈕將始終遍歷堆棧,這是您的用戶期望的行爲。

如果您正在尋找可以讓您回到父母活動的東西,比如產品X返回父產品屏幕,那麼您可以使用向上按鈕功能來定義這些東西。 Up Navigation from Android Dev Site

這樣,您不必嘗試清除和管理後退堆棧,只需定義將使用戶返回到父屏幕的項目即可。