提问者:小点点

宿主片段在另一个片段置顶时接收触摸事件


我正在创建一个全屏对话框,如此处所述显示对话框全屏或作为嵌入式片段。

所以当我想从我的片段中打开这个全屏对话框时,我会这样做:

FragmentTransaction transaction = getActivity()
        .getSupportFragmentManager()
        .beginTransaction();

transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);

transaction.add(android.R.id.content, newFragment)
           .addToBackStack(null)
           .commit();

然而,这似乎有一个问题。当我点击屏幕时,不仅对话框片段接收触摸事件,而且底层主机片段也接收触摸事件。所以碰巧通过点击主机片段中的一个动作被触发。

为什么会出现这种情况?宿主片段不应该接收触摸事件!?

我可以通过不添加而是用对话框片段替换主机片段来解决这个问题,但这会破坏背堆栈。


共1个答案

匿名用户

所以当我想从我的片段中打开这个全屏对话框时,我会这样做

这与对话框无关。DialogFragment表现得像对话框的唯一方式是调用show()

为什么会发生这种情况?

您将一个片段作为另一个现有片段添加到同一个容器中。因此,两个片段的小部件与同一容器的子级在同一视图层次结构中——例如,您会在层次结构视图中看到这一点。没有“主机片段”的概念。

我可以通过不添加而是用对话框片段替换主机片段来解决这个问题,但这会破坏背堆栈。

我不期望它会破坏后堆栈。按BACK应该会反转事务并恢复该容器中的任何片段,当您提交()-ted事务时。