首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ListView不能响应itemclick事件的解决方法

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

作者头像
forrestlin
发布2018-05-23 17:41:10
5920
发布2018-05-23 17:41:10
举报
文章被收录于专栏:蜉蝣禅修之道蜉蝣禅修之道

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2012年12月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档