我正在创建一个全屏对话框,如此处所述显示对话框全屏或作为嵌入式片段。
所以当我想从我的片段中打开这个全屏对话框时,我会这样做:
FragmentTransaction transaction = getActivity()
.getSupportFragmentManager()
.beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction.add(android.R.id.content, newFragment)
.addToBackStack(null)
.commit();
然而,这似乎有一个问题。当我点击屏幕时,不仅对话框片段接收触摸事件,而且底层主机片段也接收触摸事件。所以碰巧通过点击主机片段中的一个动作被触发。
为什么会出现这种情况?宿主片段不应该接收触摸事件!?
我可以通过不添加而是用对话框片段替换主机片段来解决这个问题,但这会破坏背堆栈。
所以当我想从我的片段中打开这个全屏对话框时,我会这样做
这与对话框无关。DialogFragment
表现得像对话框的唯一方式是调用show()
。
为什么会发生这种情况?
您将一个片段作为另一个现有片段添加到同一个容器中。因此,两个片段的小部件与同一容器的子级在同一视图层次结构中——例如,您会在层次结构视图中看到这一点。没有“主机片段”的概念。
我可以通过不添加而是用对话框片段替换主机片段来解决这个问题,但这会破坏背堆栈。
我不期望它会破坏后堆栈。按BACK应该会反转事务并恢复该容器中的任何片段,当您提交()
-ted事务时。