ListView不能响应itemclick事件的解决方法

大家都知道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             }         }); } 如果发现错误,自己找一下,对自己有好处,不喜欢研究错误的程序猿不是好程序猿!!!!!!   

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏图像识别与深度学习

《Android》Lesson13-ListView

23111
来自专栏Android点滴积累

不得不吐槽的Android PopupWindow的几个痛点(实现带箭头的上下文菜单遇到的坑)

  说到PopupWindow,我个人感觉是又爱又恨,没有深入使用之前总觉得这个东西应该很简单,很好用,但是真正使用PopupWindow实现一些效果的时候总会...

6529
来自专栏林冠宏的技术文章

android 在 ListView 的 item 中插入 GridView 仿微信朋友圈图片显示。

转载请声明出处(https://cloud.tencent.com/developer/user/1148436/activities) 先上张效果图: ? 1...

2635
来自专栏Android开发指南

10.侧拉删除

34411
来自专栏Android开发指南

12、json、GridView、缓存

2918
来自专栏知识分享

1-系统方案A(系统方案演示和运行第一个Android程序,ListView显示数据,删除数据)

1012
来自专栏Spring相关

碎片的简单用法

1004
来自专栏Android开发指南

14.不同条目的listview

28710
来自专栏pangguoming

android AutoCompleteTextView 自定义BaseAdapter

最近项目中需要做搜索功能,实现类似 Google、Baidu 搜索的 下拉提示效果。Android为我们提供了 AutoCompleteTextView 控件来...

3566
来自专栏林冠宏的技术文章

android UI 仿 win 8 模块化 标题,并实现 可长按拖动交换图片位置、可点击,且伴随动画特效

转载请声明出处,谢谢!https://cloud.tencent.com/developer/user/1148436/activities 先上效果图,给大家...

2017

扫码关注云+社区

领取腾讯云代金券