原文:http://blog.csdn.net/xanxus46/article/details/8348931

大家都知道listview可以根据自己的需求,重写baseadapter ,实现自己的布局及数据,但是当我们在自己的布局中加入了button或者ImageButton,还有其他比如checkbox,radiobutton等控件时,发现listview不在响应onitemclick事件,让人很悲愤啊,自己在网找了个方法,可以处理掉这个东东

发生的原因:当listview中包含button,checkbox等控件的时候,android会默认将focus给了这些控件,也就是说listview的item根本就获取不到focus,所以导致onitemclick时间不能触发。
   
    既然我们知道了,发生的原因,那么我们就将button等控件的在xml布局文件中的属性android:focusable设置为false,就ok了,但通常不这样做,因为要一个一个地修改button太麻烦,通常可以修改这些button的父容器的descendantFocusability属性为false,是否很方便呢,这样即可以触发onitemclick事件,同时我们在baseadapter实现类中也可以处理button等控件的事件,两不相误。

给一下源码把,因为jar中很多测试例子所以就不给全部了,

1.list.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical" >
  6. <ListView android:id="@+id/list"
  7. android:layout_width="wrap_content"
  8. android:layout_height="wrap_content"
  9. >
  10. </ListView>
  11. </LinearLayout>

复制代码

2.list_item.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:descendantFocusability="blocksDescendants"
  6. android:orientation="horizontal" >
  7. <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
  8. android:text="你好吗?"
  9. android:id="@+id/text"
  10. />
  11. <Button android:id="@+id/button"
  12. android:layout_width="wrap_content"
  13. android:layout_height="wrap_content"
  14. android:layout_alignParentRight="true"
  15. android:focusable="false"
  16. android:text="确定"
  17. />
  18. </RelativeLayout>

复制代码

3.Activity的oncreate方法

public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list);
        listView = (ListView) findViewById(R.id.list);
        final String[] title = {"衣服", "手机", "相机", "电视", "下载"};
        BaseAdapter adapter = new BaseAdapter()
        {

@Override
            public View getView(int position, View convertView, ViewGroup parent)
            {
                ViewHodler hodler;
                if (convertView == null)
                {
                    LayoutInflater inflater = LayoutInflater.from(A.this);
                    convertView = inflater.inflate(R.layout.list_item, null);
                    hodler = new ViewHodler();
                    hodler.text = (TextView) convertView.findViewById(R.id.text);
                    hodler.b = (Button) convertView.findViewById(R.id.button);
                    convertView.setTag(hodler);
                }
                else
                {
                    hodler = (ViewHodler) convertView.getTag();
                }
                hodler.text.setText(title[position]);
                hodler.b.setText("立即订购" + title[position]);
                hodler.b.setOnClickListener(new OnClickListener()
                {

@Override
                    public void onClick(View v)
                    {
                        Toast.makeText(A.this, "你好吗?", 1).show();

}
                });
                return convertView;
            }

@Override
            public long getItemId(int position)
            {
                // TODO Auto-generated method stub
                return position;
            }

@Override
            public Object getItem(int position)
            {
                // TODO Auto-generated method stub
                return position;
            }

@Override
            public int getCount()
            {
                // TODO Auto-generated method stub
                return title.length;
            }

class ViewHodler
            {
                TextView text;

Button b;
            }
        };
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new OnItemClickListener()
        {

@Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id)
            {
                Toast.makeText(A.this, "这是listview的itemclick", 1).show();

}
        });
        listView.setOnItemSelectedListener(new OnItemSelectedListener()
        {

@Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
            {

Toast.makeText(A.this, "这是listview的onItemSelected", 1).show();
            }

@Override
            public void onNothingSelected(AdapterView<?> parent)
            {
                // TODO Auto-generated method stub

}
        });
}

ListView不能响应itemclick事件的解决方法相关推荐

  1. layui表格点击排序按钮后,表格绑定事件失效解决方法

    layui表格点击排序按钮后,表格绑定事件失效解决方法 参考文章: (1)layui表格点击排序按钮后,表格绑定事件失效解决方法 (2)https://www.cnblogs.com/gongliha ...

  2. Mint-ui中loadmore(上拉加载下拉刷新)组件在ios中滑动会触发点击事件的解决方法...

    bug说明: Mint-ui中loadmore(上拉加载下拉刷新)组件 在 使用fastclick的情况下 ,在ios设备中滑动会触发点击事件: 解决方法: 我是按需引入,去项目中找到loadmore ...

  3. 关于ElementUI中MessageBox弹框的取消键盘触发事件(enter,esc)关闭弹窗(执行事件)的解决方法

    关于ElementUI中MessageBox弹框的取消键盘触发事件(enter,esc)关闭弹窗(执行事件)的解决方法 参考文章: (1)关于ElementUI中MessageBox弹框的取消键盘触发 ...

  4. 你的服务器没有正确响应Token验证的解决方法

    你的服务器没有正确响应Token验证,请阅读消息接口使用指南 微信 微信公众平台开发模式 平台 消息 接口 启用 URL Token 作者:http://txw1958.cnblogs.com/ 原文 ...

  5. 360服务器已停止响应,Win7电脑提示“显示器驱动程序已停止响应 并且已恢复”解决方法...

    一.重装或升级显卡驱动 1.首先我们去网上下载"驱动精灵",打开驱动精灵软件,弹出的驱动精灵主界面之后,点击"立即检测",如下图所示. 打开今日头条,查看更多图 ...

  6. dnf服务器未响应win7,win7dnf登录黑屏未响应|win7系统未响应黑屏的解决方法

    对于win7dnf登录黑屏未响应|win7系统未响应黑屏的解决方法,很多用户都遇到过win7dnf登录黑屏,或者游戏过程中未响应的问题,很多小伙伴们对此都是头疼不已,为了帮助小伙伴们解决这个问题,小编 ...

  7. 计算机主机一会运行一会又停止,电脑时不时弹出显示器驱动程序已停止响应”的四种解决方法...

    细心小伙伴发现使用电脑的时候发现右下角时不时的弹出"显示器驱动程序已停止响应,并且已恢复"的提示框,这意味此电脑不能再运行对显卡要求高的程序,例如游戏.CAD.PS.PR等软件,改 ...

  8. python waitkey_关于python下cv.waitKey无响应的原因及解决方法

    按下键的时候,焦点要落在窗口上,不能落在cmd窗口上. 另外,一般在imshow()后要使用waitKey(),给图像绘制留下时间,不然窗口会出现无响应情况,并且图像无法显示出来. int waitK ...

  9. Js先执行点击事件,再执行失去焦点事件的解决方法

    Js先执行点击事件,再执行失去焦点事件的解决方法 思路:给失去焦点事件设置一个暂停,让点击事件先执行. js代码: //点击事件 先执行 $(document.body).on('click','#e ...

最新文章

  1. stn专线和otn有什么区别_专线与干线运输的区别是什么?
  2. 浙江大学《深度学习与行人重识别》课程课件
  3. sklearn中train_test_split函数中的random_state有什么用?
  4. 二极管名称中英文互译
  5. docker WARNING: bridge-nf-call-iptables is disabled 处理
  6. 《大数据算法》一1.2 大数据算法
  7. 密码方法三层三级联动
  8. 判断只有符号数字 java_java编程 判断输入的字符,数字,及其他符号的个数
  9. CC版本添加 LUCI
  10. linux6.0设置共享文件夹,[原创] how to virtualbox sharefolder共享文件夹(数据空间)设置全记录...
  11. php 获取一维数组里的最大值和最小值
  12. 《HelloGitHub》第 13 期
  13. SynthMaster One波表合成器绿色版亲测有效
  14. Lumerical官方案例、FDTD时域有限差分法仿真学习(五)——液晶(liquid crystal)
  15. 小米路由器青春版刷潘多拉、华硕固件
  16. 现代信号处理——自适应滤波器(RLS自适应滤波器)
  17. ubuntu编辑只读文件_ubuntu怎样修改只读文件?
  18. 蔚来回应测试车坠楼:初步确认为意外事故;首发苹果M2,新MacBook Pro 13英寸正式开售:9999元起|极客头条
  19. python办公笔记分享
  20. 经典CNN结构论文阅读:AlexNet

热门文章

  1. matlab分析总谐波失真THD,Matlab电气仿真技术在电力电子教学改革中的应用_中职教育...
  2. python to datetime_python-pd.to_datetime或解析日期时间不适用于我...
  3. 极路由1S 开启临时ssh 并刷breed成功
  4. Cisco AP的led开关如何打开
  5. ppt讲解html,HTML基础教程讲解.ppt
  6. 如何使用DNSPod域名解析?
  7. linux下的绑核命令,Linux下的绑核命令——taskset
  8. 5.39 综合案例2.0 - STM32蓝牙遥控小车2(语音控制)
  9. Matlab二维循环卷积程序 cconv2
  10. 英语外刊精读(Part 1):day1,泛读;day2,精读(上); day3,精读(下);