zoukankan      html  css  js  c++  java
  • 【android】ListView的item事件和item里面的view的事件同时存在

    碰到个问题:

    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、这篇文章好像可以解决同时监听的问题

    http://txlong-onz.iteye.com/blog/907186

    另外,通过这种方法不可以将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监听事件

  • 相关阅读:
    Spring学习-- AOP入门动态代理
    Spring学习--泛型依赖注入
    Spring学习--通过注解配置 Bean (三)
    Spring学习--通过注解配置 Bean (二)
    Spring学习--通过注解配置 Bean (一)
    十 字符串处理
    九 Shell中的数组
    八使用Shell函数
    七 循环结构
    六、流程控制语句
  • 原文地址:https://www.cnblogs.com/549294286/p/2662365.html
Copyright © 2011-2022 走看看