LinearLayout包裹RecyclerView,如果想给整个布局设置点击事件,发现当点击列表部分的时候点击事件不响应,猜测可能被recyclerview消耗了点击事件,所以只要让recycleview不拦截点击事件并且子view不消费这个事件,那么点击事件就会回传给父view也就是最外层的LinearLayout才处理这个事件,于是看了一下recycleview的源码:
通过onInterceptTouchEvent()和onTouchEvent()这2个方法,发现了一个参数mLayoutFrozen,如果他为true的时候,recycleview这2个方法都会返回false,也就不会拦截这个事件了。于是我找到设置这个方法的地方:上面的注释也写的很清楚,设置他为true,相当于冻结了recycleview,不能滚动不能点击,但是设置了之后还是无法响应点击事件,于是我又看到注释上面写了 {@link #setAdapter(Adapter)} and {@link #swapAdapter(Adapter, boolean)} will automatically * stop frozen. 这句话意思就是setAdapter(Adapter)会把这个参数设为false,于是我找到setAdapter方法:
果然,于是我在setAdapter之后再setLayoutFrozen(),这样就达到需求了。