如何通过使用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() } }