现象:
一个Fragment,层叠在另外一个Fragment或者Activity之上,此Fragment中有一些空白区域,也即Widget之外的空白区域,当点击这些空白区域的时候发现这个Fragment下面的Fragment或者Activity中的View收到了事件并且响应了点击事件。
原因:
Fragment的本质就是一个View布局的管理器,当Fragment attach到Activity时,其实就是把Fragment.onCreateView()返回的View,替换掉(如果是用replace)FragmentTransaction#replace中指定的View,或者添加到(如果是add)FragmentTransaction.add()中指定的ViewGroup里面。
当我们以层叠方式显示多个Fragment时,通常的做法就是弄一个FrameLayout,然后每次把Fragment add到此布局。因此,这时Activity的页面布局树实际上就是一个FrameLayout里面包含几个View。
所以,当点击上面Fragment的空白区域时,如果事件没被吃掉,就会向下传递。
如何破解:
在Fragment的根布局加上一个clickable=true,这会让根布局把点击事件吃掉,以防止事件会继续传递下去,造成上面的情况。