一般而言ListView之所以无法响应Item的点击事件,是因为ListView获取不到的焦点,点击事件和触摸事件不同,点击事件无法传递,因此有且只有一个View能响应用户的一个点击事件。
ListView获取不到焦点有两种情况:
1.焦点被ListView的容器外的控件所获取:
比如你在popupwindow中嵌入了一个listview,你会发现你无法点击ListView,因为默认情况下popupwindow是不会获取焦点的,也就是焦点被ListView的容器popupwindow之外的控件获取了,此时只要让popupwindow获取焦点就可以了,因为popupwindow中只有一个ListView,所以点击事件就被ListView获取了;
2.焦点被ListView的Item的子View所获取:
因为只有一个View能响应点击事件,默认情况下,只要ViewGroup获取了焦点,优先传递给子View来实现点击事件。如果ListView的Item的布局里面,使用了能获取焦点的控件,比如button,就会导致ListView无法正常实现Item的点击事件。这种情况下ListView就需要在Adapter中,去除所有子View的焦点,通过setFocusable(false)来实现。也可通过设置descendantFocusability属性来实现,待验证。
3.压根没设置ListView的监听事件。。。。。。
相信大家都懂0.0