0

我想在actionBar中实现Home/Up按钮。我有一个Activity(A)和两个片段(设置(B)和About(C))的简单应用。ActionBar主页按钮 - 隐藏片段并清除回栈

在其他问题我发现使用popBackStack,但这不是解决方案,因为如果用户进入A> B> C> B> C,后退按钮转到C> B> C> B> A(这是正确的行为?)。

switch (item.getItemId()){ 
     case R.id.action_settings: 
      // get preferences fragment 
      getFragmentManager().beginTransaction() 
        .replace(android.R.id.content, new PrefFragment()) 
        .addToBackStack(null) 
        .commit(); 
      getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
      return true; 
     case R.id.action_about: 
      // get about fragment 
      getFragmentManager().beginTransaction() 
        .replace(android.R.id.content, new AboutFragment()) 
        .addToBackStack(null) 
        .commit(); 
      getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
      return true; 
     case android.R.id.home: 
      // clear back stack and show home screen? 

      getSupportActionBar().setDisplayHomeAsUpEnabled(false); 
      return true; 
    } 

我需要最后一种情况下隐藏的任何片段(表明主要活动窗口),并清除我的背部栈 - 回家,不回来了。我怎么能做到这一点?

我使用AppCompat库。

回答

1

试试这个:

private void clearBackStack() { 
    FragmentManager manager = getSupportFragmentManager(); 
    if (manager.getBackStackEntryCount() > 0) { 
     FragmentManager.BackStackEntry first = manager.getBackStackEntryAt(0); 
     manager.popBackStack(first.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE); 
    } 
} 

或致电

mFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 

形成文档POP_BACK_STACK_INCLUSIVE是

标志为popBackStack(字符串,int)和popBackStack(INT,INT):如果已设置,则提供 并提供了背面堆叠条目的名称或ID,则全部将会消耗0个匹配条目,直到发现不匹配的条目为 或达到堆栈的底部。

+0

谢谢,我不得不使用'getFragmentManager'而不是'getSupportFragmentManager',否则我的后台计数为零。 – xYann00