`
yezhiqiu-love
  • 浏览: 168685 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android中自定义ListView无法响应OnItemClickListener中的onItemClick方法问题解决方案

阅读更多

在Android软件设计与实现中我们通常都会使用到ListView这个控件,系统有一些预置的Adapter可以使用,例如 SimpleAdapter和ArrayAdapter,但是总是会有一些情况我们需要通过自定义ListView来实现一些效果,那么在这个时候,我们 通常会碰到自定义ListView无法选中整个ListViewItem的情况,也就是无法响应ListView的 onItemClickListener中的onItemClick()方法,究竟是为什么呢?我之前也在网上查过不少的资料,但是没有发现什么有价值的 文章,有一些是建议在Adapter的getView方法中对自己需要响应单击事件的控件进行设置。但是最终的效果并不是特别理想,而且我认为这是一种取 巧的方式,并不推荐。之后自己查看了一下ViewGroup的源码,发现了以下的一段常量声明:

    /**
    * This view will get focus before any of its descendants.
    */
    public static final int FOCUS_BEFORE_DESCENDANTS = 0×20000;
    /**
    * This view will get focus only if none of its descendants want it.
    */
    public static final int FOCUS_AFTER_DESCENDANTS = 0×40000;
    /**
    * This view will block any of its descendants from getting focus, even
    * if they are focusable.
    */
    public static final int FOCUS_BLOCK_DESCENDANTS = 0×60000;

    /**     * This view will get focus before any of its descendants.     */

    public static final int FOCUS_BEFORE_DESCENDANTS = 0×20000;
    /**     * This view will get focus only if none of its descendants want it.     */

    public static final int FOCUS_AFTER_DESCENDANTS = 0×40000;
    /**     * This view will block any of its descendants from getting focus, even     * if they are focusable.     */

    public static final int FOCUS_BLOCK_DESCENDANTS = 0×60000;

 我们看到了一行代码定义的变量的意思是“当前View将屏蔽他所有子控件的Focus状态,即便这些子控件是可以Focus的”,其实这段话的意思就是这 个变量代表着当前的View将不顾其子控件是否可以Focus自身接管了所有的Focus,通常默认能获得focus的控件有 Button,Checkable继承来的所有控件,这就意味着如果你的自定义ListViewItem中有Button或者Checkable的子类控 件的话,那么默认focus是交给了子控件,而ListView的Item能被选中的基础是它能获取Focus,也就是说我们可以通过将ListView 中Item中包含的所有控件的focusable属性设置为false,这样的话ListView的Item自动获得了Focus的权限,也就可以被选中 了,也就会响应onItemClickListener中的onItemClick()方法,然而将ListView的Item Layout的子控件focusable属性设置为false有点繁琐,我们可以通过对Item Layout的根控件设置其android:descendantFocusability=”blocksDescendant”即可,这样Item Layout就屏蔽了所有子控件获取Focus的权限,不需要针对Item Layout中的每一个控件重新设置focusable属性了,如此就可以顺利的响应onItemClickListener中的 onItenClick()方法了。

分享到:
评论

相关推荐

    android 自定义ListView实现单选

    本篇文章将详细探讨如何通过自定义ListView来实现单选功能,旨在帮助开发者解决这一问题。 一、自定义ListView的必要性 系统自带的ListView默认并未提供单选模式,而是多选或全选。当用户需要在列表中选择一个项目...

    android自定义ListView控件实现下拉刷新、分页加载、item点击

    这篇内容将详细介绍如何在Android中实现这些功能。 一、下拉刷新 下拉刷新功能让用户能够通过在ListView顶部向下拉动来更新列表数据。实现这一功能的关键是使用SwipeRefreshLayout。首先,在XML布局文件中添加...

    android dialog嵌套ListView

    以上就是关于“android dialog嵌套ListView”实现的基本步骤,包括创建自定义布局、适配器、设置点击事件以及在`Dialog`中显示`ListView`。通过这种方式,我们可以在`Dialog`中展示丰富的列表数据,并允许用户进行...

    Android中的ListView控件学习

    在Android开发中,ListView是一个非常重要的控件,它允许开发者在一个垂直滚动的列表中展示大量数据。本篇文章将深入探讨ListView的基本用法、工作原理以及优化策略,旨在帮助你掌握这个核心组件。 **1. ListView的...

    Android下Listview的onItemClick以及onItemLongClick等易模糊问题验证

    这篇博客"Android下Listview的onItemClick以及onItemLongClick等易模糊问题验证"可能探讨了在实现这些监听器时常见的问题和解决方案。 首先,`onItemClick`方法是当用户点击ListView中的一个项目时被调用。它接收`...

    Android ListView 之 自定义Adapter 实现列表条目功能,以及 OnItemClickListener(点击事件) OnScrollListener(滑动事件)事件监听

    Android ListView 之 自定义Adapter 实现列表条目功能,以及 OnItemClickListener(点击事件) OnScrollListener(滑动事件)事件监听   目录 Android ListView 之 自定义Adapter 实现列表条目功能,以及 ...

    android中的ListView的使用方法

    本篇将详细介绍如何在Android中使用ListView,包括基本用法、自定义适配器以及优化策略。 一、ListView的基本使用 1. XML布局添加ListView 首先,在布局文件中,我们需要添加一个ListView元素,设置其ID以便在代码...

    安卓listview相关相关-Android开发之ListView+EditText焦点问题解决方案.rar

    类似于上面的方法,也可以在`OnItemClickListener`的`onItemClick()`方法中处理焦点问题。但这种方法可能在快速滚动时触发多次,因此需要适当控制。 4. **自定义Adapter**: 在自定义Adapter中,可以重写`getView...

    Android之ListView列表视图和界面跳转实现

    在Android开发中,ListView是一种非常常见的控件,用于展示大量数据的列表形式。它具有高度可定制性,能够实现各种自定义布局和交互效果。本教程将深入讲解如何实现一个基本的ListView,并在用户点击列表项时跳转到...

    Android开发教程:仿通讯录ListView小例子

    本教程将引导你实现一个简单的仿通讯录ListView小例子,通过这个实例,你可以学习到如何在Android中有效地利用ListView来创建交互式用户界面。 首先,我们需要了解ListView的基本结构。ListView由多个列表项(list ...

    android多选ListView示例

    为了响应用户的操作,我们需要设置ListView的OnItemClickListener和OnItemLongClickListener。当选中状态改变时,我们可以更新Adapter中的选中状态,并可能需要同步到其他数据结构(如数据库)。 ```java listView....

    android中一个简单的LIstView用法例子

    在Android开发中,...通过实践这个简单的ListView例子,你可以深入理解Android中列表视图的使用,为以后的开发工作打下坚实的基础。在实际项目中,你可能会遇到更复杂的需求,但只要掌握了基本原理,就能灵活应对。

    android listview 列表 点击列表进入详细页面

    1. 设置OnItemClickListener:为了监听ListView的点击事件,我们需要为ListView设置一个OnItemClickListener。当用户点击列表项时,会触发onItemClick()方法。 ```java listView.setOnItemClickListener(new ...

    android如果用ListView做一个表格形式

    以下是一些关于如何在Android中使用ListView创建表格形式的知识点: 1. **理解ListView**: ListView是Android中的一个视图组件,它能够显示一列可滚动的数据项。通常,ListView会与Adapter配合使用,Adapter负责...

    Android之用PopupWindow实现弹出listview形式的菜单

    在Android开发中,`PopupWindow`是一个非常实用的组件,它可以用来实现各种形式的弹出窗口,如下拉菜单、提示框等。本教程将详细讲解如何使用`PopupWindow`来创建一个以`ListView`形式展示的菜单。首先,我们需要...

    Android中使用ListView实现表格形式的部局

    本教程将深入讲解如何在Android中使用ListView来实现表格布局,以及如何进行自定义以满足可变长度的表格布局需求,并添加简单的行组件单击事件。 首先,要实现基本的表格布局,我们需要创建一个自定义的列表项布局...

    android listview的使用方法

    本篇文章将深入探讨如何在Android中使用ListView,包括基本配置、适配器(Adapter)的使用以及一些优化技巧。 首先,我们需要在布局文件中添加ListView元素。在XML布局中,你可以这样定义一个ListView: ```xml ...

    Android中listView选中第一行,或任意一行,选中后能取消

    在Android开发中,ListView是一种常用的组件,用于展示大量的列表数据。ListView通过适配器(Adapter)将数据绑定到视图上,实现数据与界面的交互。在这个特定的场景下,我们关注的是如何实现ListView的第一行或者...

    android listView 单选 功能

    总之,要在Android中实现ListView的单选功能,关键在于创建一个带有选中状态的数据模型,自定义适配器以显示选中状态,以及设置点击事件来更新选中状态。在实际开发中,你可能还需要考虑其他因素,如动画效果、多...

    android listview单击事件

    总之,Android中的ListView单击事件处理是开发者必备的技能之一。通过理解ListView的工作原理,适当地设置监听器,并处理好点击事件,可以创建出交互丰富的应用程序。在这个过程中,不断优化性能和用户体验,将使你...

Global site tag (gtag.js) - Google Analytics