当另一个片段在顶部时,主机片段接收触摸事件

时间:2014-07-17 19:58:26

标签: android android-fragments android-dialogfragment

我正在创建一个全屏对话框,如此处所述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();

但是这似乎有一个问题。当我点击屏幕时,不仅对话框片段接收触摸事件,还接收底层主机片段。因此,通过在主机片段中触发操作会发生这种情况。

为什么会这样?主机片段不应接收触摸事件!

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

1 个答案:

答案 0 :(得分:3)

  

所以当我想从我的片段中打开这个全屏对话框

这与对话框无关。如果您拨打DialogFragmentshow()的行为就像对话框一样。

  

为什么会这样?

您将片段添加到与另一个现有片段相同的容器中。因此,两个片段的小部件与同一容器的子节点位于相同的视图层次结构中 - 例如,您将在层次结构视图中看到这一点。没有“宿主片段”的概念。

  

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

我不希望它打破后台。按BACK可以反转事务并在commit()处理事务时恢复该容器中的任何片段。