2012-02-01 82 views
7

如何删除当前并显示前一个片段?就像如果我按“返回”按钮显示前一个片段

我使用这样的结构:

FragmentManager fm=getFragmentManager(); 
FragmentTransaction ft=fm.beginTransaction(); 
ft.remove(fragment).commit(); 

但它只是删除当前片段,没有表现出以往

回答

13

你必须调用FragmentTransaction.addToBackStack(null)在其中添加该片段,然后在您想要删除它时调用FragmentManager.popBackStack()

+2

而如果你这样做,你将不必重写BACK按钮的行为。可见片段将自动被移除,当您按下BACK时,后台堆栈中的下一个片段将自动显示。 – 2012-02-01 19:17:01

+0

这不适用于我我正在使用v4库。 – 2014-01-30 09:18:18

+0

FragmentManager.popBackStack()重新加载片段。 – 2014-02-17 06:35:43

4

在您的活动添加这个方法:

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { 
      if(this.getFragmentManager().getBackStackEntryCount() != 0){ 
       this.getFragmentManager().popBackStack(); 
       return true; 
      } 
      // If there are no fragments on stack perform the original back button event 
     } 

     return super.onKeyDown(keyCode, event); 
    } 

然后你在哪里改变片段做到这一点:

FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
transaction.replace(android.R.id.content, new YourFragmentName()); 
transaction.addToBackStack(null); // this is needed for the above code to work 
transaction.commit(); 
0

尽量表现之后删除以前的片段:

FragmentManager fm=getSupportFragmentManager(); 
    FragmentTransaction ft=fm.beginTransaction(); 
    ft.remove(fragment).commit(); 

    previousFragment=(SherlockFragment)getSupportFragmentManager() 
    .findFragmentByTag(""+currentTagNum); 
    getSupportFragmentManager().beginTransaction() 
      .show(mFragment) 
      .commit();