假设我有一个以编程方式添加片段的活动:

private void animateToFragment(Fragment newFragment, String tag) {
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.replace(R.id.fragment_container, newFragment, tag);
    ft.addToBackStack(null);
    ft.commit();
}

返回前一个可见片段的最佳方法是什么?

我发现Android中按钮点击的触发后退按钮功能,但我认为模拟后退键事件不是正确的方法(我也不能让它工作):

dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));

调用finish()只是关闭我不感兴趣的活动。

还有更好的办法吗?


当前回答

将这些行添加到onBackPressed()方法中。popBackStackImmediate()方法会让你回到之前的片段,如果你有任何片段在后面的堆栈 `

if(getFragmentManager().getBackStackEntryCount() > 0){
     getFragmentManager().popBackStackImmediate();
}
else{
    super.onBackPressed();
}

`

其他回答

getActivity().getSupportFragmentManager().popBackStackImmediate();

OR

 getActivity().onBackPressed();

通过在最后一个片段上添加fragment_trans . addtobackstack (null),我能够在最后一个片段上返回。

添加新片段:

view.findViewById(R.id.changepass).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
            transaction.replace(R.id.container, new ChangePassword());
            transaction.addToBackStack(null);
            transaction.commit();
        }
    });

芬兰湾的科特林回答

首先,调用片段管理器。 之后,使用onBackPressed() 方法。

使用Kotlin在Android Studio 4.0中编码:

fragmentManager?.popBackStack()

查看getFragmentManager().popBackStack()方法(有几个可供选择)

http://developer.android.com/reference/android/app/FragmentManager.html popBackStack ()

使用下面的代码以编程方式返回到前面的片段。

if ( getFragmentManager().getBackStackEntryCount() > 0) 
{
          getFragmentManager().popBackStack();
          return;
}
super.onBackPressed();