ListView不能响应itemclick事件的解决方法
原文: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
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
- <ListView android:id="@+id/list"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- >
- </ListView>
- </LinearLayout>
复制代码
2.list_item.xml
- <?xml version="1.0" encoding="utf-8"?>
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:descendantFocusability="blocksDescendants"
- android:orientation="horizontal" >
- <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
- android:text="你好吗?"
- android:id="@+id/text"
- />
- <Button android:id="@+id/button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentRight="true"
- android:focusable="false"
- android:text="确定"
- />
- </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事件的解决方法相关推荐
- layui表格点击排序按钮后,表格绑定事件失效解决方法
layui表格点击排序按钮后,表格绑定事件失效解决方法 参考文章: (1)layui表格点击排序按钮后,表格绑定事件失效解决方法 (2)https://www.cnblogs.com/gongliha ...
- Mint-ui中loadmore(上拉加载下拉刷新)组件在ios中滑动会触发点击事件的解决方法...
bug说明: Mint-ui中loadmore(上拉加载下拉刷新)组件 在 使用fastclick的情况下 ,在ios设备中滑动会触发点击事件: 解决方法: 我是按需引入,去项目中找到loadmore ...
- 关于ElementUI中MessageBox弹框的取消键盘触发事件(enter,esc)关闭弹窗(执行事件)的解决方法
关于ElementUI中MessageBox弹框的取消键盘触发事件(enter,esc)关闭弹窗(执行事件)的解决方法 参考文章: (1)关于ElementUI中MessageBox弹框的取消键盘触发 ...
- 你的服务器没有正确响应Token验证的解决方法
你的服务器没有正确响应Token验证,请阅读消息接口使用指南 微信 微信公众平台开发模式 平台 消息 接口 启用 URL Token 作者:http://txw1958.cnblogs.com/ 原文 ...
- 360服务器已停止响应,Win7电脑提示“显示器驱动程序已停止响应 并且已恢复”解决方法...
一.重装或升级显卡驱动 1.首先我们去网上下载"驱动精灵",打开驱动精灵软件,弹出的驱动精灵主界面之后,点击"立即检测",如下图所示. 打开今日头条,查看更多图 ...
- dnf服务器未响应win7,win7dnf登录黑屏未响应|win7系统未响应黑屏的解决方法
对于win7dnf登录黑屏未响应|win7系统未响应黑屏的解决方法,很多用户都遇到过win7dnf登录黑屏,或者游戏过程中未响应的问题,很多小伙伴们对此都是头疼不已,为了帮助小伙伴们解决这个问题,小编 ...
- 计算机主机一会运行一会又停止,电脑时不时弹出显示器驱动程序已停止响应”的四种解决方法...
细心小伙伴发现使用电脑的时候发现右下角时不时的弹出"显示器驱动程序已停止响应,并且已恢复"的提示框,这意味此电脑不能再运行对显卡要求高的程序,例如游戏.CAD.PS.PR等软件,改 ...
- python waitkey_关于python下cv.waitKey无响应的原因及解决方法
按下键的时候,焦点要落在窗口上,不能落在cmd窗口上. 另外,一般在imshow()后要使用waitKey(),给图像绘制留下时间,不然窗口会出现无响应情况,并且图像无法显示出来. int waitK ...
- Js先执行点击事件,再执行失去焦点事件的解决方法
Js先执行点击事件,再执行失去焦点事件的解决方法 思路:给失去焦点事件设置一个暂停,让点击事件先执行. js代码: //点击事件 先执行 $(document.body).on('click','#e ...
最新文章
- stn专线和otn有什么区别_专线与干线运输的区别是什么?
- 浙江大学《深度学习与行人重识别》课程课件
- sklearn中train_test_split函数中的random_state有什么用?
- 二极管名称中英文互译
- docker WARNING: bridge-nf-call-iptables is disabled 处理
- 《大数据算法》一1.2 大数据算法
- 密码方法三层三级联动
- 判断只有符号数字 java_java编程 判断输入的字符,数字,及其他符号的个数
- CC版本添加 LUCI
- linux6.0设置共享文件夹,[原创] how to virtualbox sharefolder共享文件夹(数据空间)设置全记录...
- php 获取一维数组里的最大值和最小值
- 《HelloGitHub》第 13 期
- SynthMaster One波表合成器绿色版亲测有效
- Lumerical官方案例、FDTD时域有限差分法仿真学习(五)——液晶(liquid crystal)
- 小米路由器青春版刷潘多拉、华硕固件
- 现代信号处理——自适应滤波器(RLS自适应滤波器)
- ubuntu编辑只读文件_ubuntu怎样修改只读文件?
- 蔚来回应测试车坠楼:初步确认为意外事故;首发苹果M2,新MacBook Pro 13英寸正式开售:9999元起|极客头条
- python办公笔记分享
- 经典CNN结构论文阅读:AlexNet
热门文章
- matlab分析总谐波失真THD,Matlab电气仿真技术在电力电子教学改革中的应用_中职教育...
- python to datetime_python-pd.to_datetime或解析日期时间不适用于我...
- 极路由1S 开启临时ssh 并刷breed成功
- Cisco AP的led开关如何打开
- ppt讲解html,HTML基础教程讲解.ppt
- 如何使用DNSPod域名解析?
- linux下的绑核命令,Linux下的绑核命令——taskset
- 5.39 综合案例2.0 - STM32蓝牙遥控小车2(语音控制)
- Matlab二维循环卷积程序 cconv2
- 英语外刊精读(Part 1):day1,泛读;day2,精读(上); day3,精读(下);