话不多说,先上图.......
可以看到在Srcollview中嵌套了一个listview,我们知道如果按照常规方法,这两个控件的滑动是肯定会冲突的,会造成listview只能显示一条item
网上大部分解决方案都是让listview展示最大条数,这种方案虽然能完全展示listview的所有数据,但是itemview无法复用,如有需要大家可以自行百度,这里不讨论这种解决办法...
那么如何才能实现外面的ScrollView和里面的ListView都能滚动而互不影响呢?
查看ScrollView中有一个继承了Viewgroup父类的方法requestDisallowInterceptTouchEvent(boolean);
这个方法的详细介绍请看: android 事件处理机制之requestDisallowInterceptTouchEvent
这个方法是设置是否交出ontouch权限的,如果让外层的scrollview.requestDisallowInterceptTouchEvent(false);那么外层的onTouch权限会失去,这样里面的listview就能
拿到ontouch权限了,listView也就能滚了。
权限只有一个,如果要支持两个view都能滚动,那么当手指触到listview的时候,让外面的scrollview交出权限,当手指松开后,外面的scrollview重新获得权限。这样ok了。
因为代码量太少就不贴出具体代码了,下载一个demo跑一跑简单又明了。。。。
注:在MainActivity中生成这个内部Listview的需要将其外层的scrollview传递给该listview,同时需要按照实际情况给改listivew设置一个高度,否则无法展示出来。该listview可以嵌套多层没有滑动冲突的viewgroup
下面贴出下载链接:ScrollView嵌套ListView滑动冲突的解决方案