显示上一个片段

7

如何移除当前片段并显示先前的片段?就像我按“返回”按钮一样。

我正在使用以下结构:

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

但它只是删除当前片段,而不显示之前的片段。
3个回答

13

2
如果您这样做,就不必覆盖BACK按钮的行为。可见片段将在您按下BACK时自动删除,并自动显示后退堆栈中的下一个片段。 - Sam Dozor
FragmentManager.popBackStack() 重新加载片段。 - madan V

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();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接