您的位置:首页 > 其它

Listview大坑,使用OnItemClickListener代替对子view单独设置OnClickListener

2017-02-14 17:29 1101 查看
当每调用一次notifyDataSetChange,listview就会取消它所有子view的touch事件,此时action_up事件被取消改为action_cancel事件,子view的onclick函数就不会响应了。

我在实际应用中在制作下载列表的时候就因为进度条要不断更新,调用notifyDataSetChange,导致onClick函数无法响应没法取消下载,如果用OnItemClickListener来实现相同的功能就不会有问题,主要是用习惯了recyclerview,recyclerview并不会有这个问题,而且recyclerview也没有OnItemClickListener

Listview在layoutChildren函数中如果dataChanged为true,那么就会取消子view的touch事件,如果在触发了down后被取消了touch事件,那么就接收不了up事件,这时候就没法响应子view的onclick了,因为如果是子view自己设置onclick,那么只有子view自己的onTouchEvent函数接收到了up事件才会响应onClick,而OnItemClickListener则是父类接收到了up事件就会直接调用对应的子view的performClick,所以即使子view的up事件被取消了,依然能响应OnItemClickListener

if (dataChanged) {
for (int i = 0; i < childCount; i++) {
recycleBin.addScrapView(getChildAt(i), firstPosition+i);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐