如何通过使用button像后退buttonclosures当前的片段?

我已经尝试通过使用Imagebuttonclosures当前片段。

我在片段A中,当我点击button时,它会转到片段B.

当我点击Fragment-B的button时,它会转到Fragment-C并closuresFragment-B。

如果我点击Fragment-C的后退button,它会回到Fragment-A。

我尝试的代码如下所示

camera_album = (ImageButton) view.findViewById(R.id.camera_album); camera_album.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { closefragment(); Fragment fragment = FileBrowserFragment.newInstance(null, null, null) ; MainActivity.addFragment(LocalFileBrowserFragment.this, fragment) ; } }); private void closefragment() { getActivity().getFragmentManager().beginTransaction().remove(this).commit(); } 

当我点击片段B的后退button时,它将转到片段C。

但是当我点击Fragment-C上的后退button时,它不会回到Fragment-A。 它回到空的背景。 如果我想回到Fragment-A,我必须再次点击后退button。

所以,它似乎并没有closures当前的片段完整。

如何像Android的后退button完成当前的片段?

从片段A到B,用BreplaceA,在commit()之前使用addToBackstack() commit()

现在从片段B到C,首先使用popBackStackImmediate() ,这将带回A.现在用CreplaceA,就像第一个事务一样。

我从getActivity().getFragmentManager().beginTransaction().remove(this).commit();改变代码getActivity().getFragmentManager().beginTransaction().remove(this).commit();

 getActivity().getFragmentManager().popBackStack(); 

它可以closures片段。

对于那些需要弄清楚简单的方法

尝试getActivity().onBackPressed();

尝试这个:

 ft.addToBackStack(null); // ft is FragmentTransaction 

所以,当你按下后退键时 ,当前活动(包含多个片段)将加载前一个片段,而不是完成自身。

getActivity()。onBackPressed做你所需要的。 它会自动调用父活动中的onBackPressed方法。

尝试这个:

 public void removeFragment(Fragment fragment){ android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager(); android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.remove(fragment); fragmentTransaction.commit(); } 

如果您需要使用后退button更具体地处理操作,则可以使用以下方法:

  view.setFocusableInTouchMode(true); view.requestFocus(); view.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if( keyCode == KeyEvent.KEYCODE_BACK ) { onCloseFragment(); return true; } else { return false; } } }); 

这是一个Kotlin这样做的方式,我已经在片段布局中创build了button,然后在onViewCreated中设置onClickListner。

根据@ Viswanath-Lekshmanan的评论

 override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) btn_FragSP_back.setOnClickListener { activity.onBackPressed() } }