Fragment多层嵌套,管理出栈

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

嘿嘿嘿

第一层使用的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多层嵌套,管理出栈)