ListView中的item布局中如果有button,则ListView的OnItemClickListener不会触发。如果设置button的focusable为false可解决。
原因分析(基于android-27源码)
OnItemClickListener调用流程:
AbsListView.onTouchEvent方法处理触摸事件,当收到UP事件时调用onTouchUp方法,
然后调用AbsListView.PerformClick.run() ->performItemClick() -> super.performItemClick() -> mOnItemClickListener.onItemClick
关键在onTouchUp方法中存在条件判断:
if (inList && !child.hasExplicitFocusable()) {
即需要满足item及其子View不是focusable的。