在Onbackpressed上获取之前的片段

时间:2017-06-02 05:37:22

标签: android

情况是这样的 流程:活动 - >片段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()); }

2 个答案:

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