我正在创建一个全屏对话框,如此处所述Showing a Dialog Fullscreen or as an Embedded Fragment。
所以,当我想从我的片段中打开这个全屏对话框时,我会这样做:
FragmentTransaction transaction = getActivity()
.getSupportFragmentManager()
.beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction.add(android.R.id.content, newFragment)
.addToBackStack(null)
.commit();
但是这似乎有一个问题。当我点击屏幕时,不仅对话框片段接收触摸事件,还接收底层主机片段。因此,通过在主机片段中触发操作会发生这种情况。
为什么会这样?主机片段不应接收触摸事件!
我可以通过不添加但用对话框片段替换主机片段来解决这个问题,但这会破坏后台堆栈。
答案 0 :(得分:3)
所以当我想从我的片段中打开这个全屏对话框
这与对话框无关。如果您拨打DialogFragment
,show()
的行为就像对话框一样。
为什么会这样?
您将片段添加到与另一个现有片段相同的容器中。因此,两个片段的小部件与同一容器的子节点位于相同的视图层次结构中 - 例如,您将在层次结构视图中看到这一点。没有“宿主片段”的概念。
我可以通过不添加但用对话框片段替换主机片段来解决这个问题,但这会破坏后台堆栈。
我不希望它打破后台。按BACK可以反转事务并在commit()
处理事务时恢复该容器中的任何片段。