先看效果,如图,没旋转过来,毕竟大家用手机比较多
嘿嘿嘿
第一层使用的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
希望对大家有帮助。。
网友评论