您的位置:首页 > 移动开发 > Android开发

【android】ListView的item事件和item里面的view的事件同时存在

2012-08-29 17:01 459 查看
碰到个问题:

ListView的onItemClickListener监听事件,若item里面有button也监听事件,则不能同时监听事件,会有个没反应。

解决方案:

解决方案的本质就是不用onItemClickListener的事件,转移到item里面某个View的事件

方案1、获取item最外层的view

这时候如果你给listView设置listView.setOnItemLongClickListener();事件后,发现只有长按editText才能触发item的事件,所有获取焦点失去焦点转移焦点的方法都试过了。都没有方法解决:最简单的解决方法是:
在getView方法中获取item的最外层布局:viewHolder.ll_item = (LinearLayout) convertView.findViewById(R.id.ll_item);
然后在getView方法内给这个布局设置事件: viewHolder.ll_item.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
});
这样既可以点击editText输入文本,也可以点击item来触发自己需要的事件!


方案2、item底层加一层View覆盖

副作用:View上再有其他的View会监听不到事件。(未测试)

会有副作用

方案3、这篇文章好像可以解决同时监听的问题

/article/3874828.html

另外,通过这种方法不可以将ListView和ImageView同时添加了监听,通过网上搜索,原来是没有在xml中添加部分属性,在list的配置xml的根节点添加属性android:descendantFocusability="blocksDescendants",还有就是在要添加事件的控件上添加android:focusable="false",上边的代码中我已经添加过了。

这些就跟View和ListView的焦点问题相关了:
http://blog.sina.com.cn/s/blog_a855dc2c01014ith.html
方案4、(经测试)完全解决

意思跟上面的差不多,也是在最下面用一个View监听事件。item里面使用FrameLayout,完全解决。

上层的View若写了监听器,监听到事件时就把事件交个它处理了,不会继续往下传递;

若上层的View没有监听器,则事件会往下传递,直到有View监听到并处理这个事件,或到最底层结束。

这就不会出现上层的View影响下层的View监听事件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐