情况是这样的 流程:活动 - >片段1 - > Fragment2 - > Fragment3 当片段1~3出现在屏幕上时单击H / W后退按钮时,会弹出Acitivity。
我想知道在onbackpress方法中哪个片段是前一个片段被调用。
代码(活动)
public void setFragment(Fragment fragment) {
if (!isFinishing()) {
mFragmentManger.beginTransaction().replace(R.id.input_preference_contatiner, fragment).commit();
}
}
代码(片段1 2 3)
@Override
public void onClick(View v) {
InputPreferenceActivity inputPreferenceActivity = (InputPreferenceActivity) getActivity();
inputPreferenceActivity.setFragment(new InputPreferenceStep1Fragment());
}
答案 0 :(得分:0)
在片段之间进行转换时,请将addToBackStack()
作为FragmentTransaction
的一部分进行调用:
FragmentTransaction tx = fragmentManager.beginTransation();
tx.replace( R.id.fragment, new MyFragment() ).addToBackStack( "tag" ).commit();
如果您需要更详细的控制(即当某些片段可见时,您想要取消后退键),您可以在片段的父视图上设置OnKeyListener
:
//You need to add the following line for this solution to work; thanks skayred
fragment.getView().setFocusableInTouchMode(true);
fragment.getView().requestFocus();
fragment.getView().setOnKeyListener( new OnKeyListener()
{
@Override
public boolean onKey( View v, int keyCode, KeyEvent event )
{
if( keyCode == KeyEvent.KEYCODE_BACK )
{
return true;
}
return false;
}
} );
答案 1 :(得分:0)
更改片段时将此代码放入片段
片段更改中的addToBackStack(空)
FragmentManager fragmentManager=getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.container,fragment).addToBackStack(null).commit();