美文网首页AndroidAndroid知识Android
Fragment多层嵌套,管理出栈

Fragment多层嵌套,管理出栈

作者: Persisten | 来源:发表于2016-07-24 20:58 被阅读890次

    先看效果,如图,没旋转过来,毕竟大家用手机比较多

    嘿嘿嘿

    第一层使用的dialogFragment,我应用的场景是在tv上,使用的dialogfragment可以避免activity和fragment之间的焦点问题

    然后在dialogfragment中依次添加fragment,添加到“3333”时,已经为第四个fragment。这个时候按返回键,最后一个fragment即“3333”和“test”都会收到onBackPressed()然后会响应给上层的OnKeyListener处理。这样一次返回操作会使两个fragment都出栈,主要使在fragment管理的地方调用了两次出栈。

    解决办法首先想到的就是屏蔽第二个fragment的返回事件的向下传递,网上可以找到屏蔽返回事件的操作,但不适应多次出栈进栈的操作。最后无奈选择了一个比较粗躁的方式,看代码,实在是简单到拿不出手。

    Dialog dialog = getDialog();

    dialog.setOnKeyListener(newDialogInterface.OnKeyListener() {

    @Override

    public booleanonKey(DialogInterface dialog, intkeyCode,KeyEvent event) {

    if(keyCode == KeyEvent.KEYCODE_BACK) {

    Log.e("back","===========");

    if(System.currentTimeMillis()-lastTime>500&&fragmentManager.getBackStackEntryCount() >1) {

    fragmentManager.popBackStack();

    lastTime= System.currentTimeMillis();

    return true;

    }

    }return false;}

    });

    但是这个方法是有效的,而且是合理的。

    最后还是要说一下发生这种现象的原因。在解决这一问题的过程中看到一篇博客,主要是依次添加的fragment会处于不同的FragmentTransaction中,而最后添加的两个fragment正好处于同一个FragmentTransaction,像是这两个fragment在fragment管理上属于同一层,于是就响应了两个返回事件。

    相关链接:http://blog.csdn.net/guxiao1201/article/details/40476267

    希望对大家有帮助。。

    相关文章

      网友评论

        本文标题:Fragment多层嵌套,管理出栈

        本文链接:https://www.haomeiwen.com/subject/hboijttx.html