如何删除当前并显示前一个片段?就像如果我按“返回”按钮显示前一个片段
我使用这样的结构:
FragmentManager fm=getFragmentManager();
FragmentTransaction ft=fm.beginTransaction();
ft.remove(fragment).commit();
但它只是删除当前片段,没有表现出以往
如何删除当前并显示前一个片段?就像如果我按“返回”按钮显示前一个片段
我使用这样的结构:
FragmentManager fm=getFragmentManager();
FragmentTransaction ft=fm.beginTransaction();
ft.remove(fragment).commit();
但它只是删除当前片段,没有表现出以往
你必须调用FragmentTransaction.addToBackStack(null)
在其中添加该片段,然后在您想要删除它时调用FragmentManager.popBackStack()
。
在您的活动添加这个方法:
@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();
尽量表现之后删除以前的片段:
FragmentManager fm=getSupportFragmentManager();
FragmentTransaction ft=fm.beginTransaction();
ft.remove(fragment).commit();
previousFragment=(SherlockFragment)getSupportFragmentManager()
.findFragmentByTag(""+currentTagNum);
getSupportFragmentManager().beginTransaction()
.show(mFragment)
.commit();
而如果你这样做,你将不必重写BACK按钮的行为。可见片段将自动被移除,当您按下BACK时,后台堆栈中的下一个片段将自动显示。 – 2012-02-01 19:17:01
这不适用于我我正在使用v4库。 – 2014-01-30 09:18:18
FragmentManager.popBackStack()重新加载片段。 – 2014-02-17 06:35:43