今天遇到一个问题: android中ListView点击和里边button点击不能同时生效问题解决。

原因是:

listView在开始绘制的时候,系统首先调用getCount()函数,根据他的返回值得到listView的长度(这也是为什么在开始的第一张图特别的标出列表长度),然后根据这个长度,调用getView()逐一绘制每一行。如果你的getCount()返回值是0的话,列表将不显示同样return 1,就只显示一行。

  系统显示列表时,首先实例化一个适配器(这里将实例化自定义的适配器)。当手动完成适配时,必须手动映射数据,这需要重写getView()方法。系统在绘制列表的每一行的时候将调用此方法。getView()有三个参数,position表示将显示的是第几行,covertView是从布局文件中inflate来的布局。我们用LayoutInflater的方法将定义好的vlist2.xml文件提取成View实例用来显示。然后将xml文件中的各个组件实例化(简单的findViewById()方法)。这样便可以将数据对应到各个组件上了。但是按钮为了响应点击事件,需要为它添加点击监听器,这样就能捕获点击事件。至此一个自定义的listView就完成了,现在让我们回过头从新审视这个过程。系统要绘制ListView了,他首先获得要绘制的这个列表的长度,然后开始绘制第一行,怎么绘制呢?调用getView()函数。在这个函数里面首先获得一个View(实际上是一个ViewGroup),然后再实例并设置各个组件,显示之。好了,绘制完这一行了。那 再绘制下一行,直到绘完为止。在实际的运行过程中会发现listView的每一行没有焦点了,这是因为Button抢夺了listView的焦点,只要布局文件中将Button设置为没有焦点就OK了。

另外,通过这种方法不可以将ListView和ImageView同时添加了监听,通过网上搜索,原来是没有在xml中添加部分属性,在list的配置xml的根节点添加属性android:descendantFocusability="blocksDescendants",还有就是在要添加事件的控件上添加android:clickable="true"
android:focusable="false"

listView.setOnItemClickListener(new OnItemClickListener() {

public void onItemClick(AdapterView<?> adapter, View arg1, int position,
long arg3) {
adapter.getItemAtPosition(position);//获取当前点击项的数据
}
});

原: http://fine36.blog.163.com/blog/static/189251005201182125629527/

更多相关文章

  1. android 布局长度单位深入研究
  2. Android(安卓)常用的距离单位
  3. android widget 开发实例 : 桌面便签程序的实现详解和源码 (上)
  4. android开发实例02:列表字母索引与过滤检索
  5. Android(安卓)中读取Excel文件实例详解
  6. Android中通过AsyncTask类来制作炫酷进度条的实例教程
  7. 常用Android开发组件之列表类组件
  8. 彻底弄懂Activity的启动模式和任务栈
  9. Android数据读取之Sqlite数据库操作

随机推荐

  1. 第二讲:Android系统构架分析和应用程序目
  2. Android Studio 网络调试
  3. Android(安卓)在oncreate() 方法中调用 f
  4. Android实现九宫格 主界面应用列表效果
  5. android的xml解析
  6. android之inputType属性
  7. Android SDK中 tools 目录下的工具介绍
  8. ubuntu下第一个Jni例子
  9. 在Android中如何使用全局变量--Applicati
  10. Android(安卓)Activity生命周期管理 .