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()方法了。
分享到:
相关推荐
本篇文章将详细探讨如何通过自定义ListView来实现单选功能,旨在帮助开发者解决这一问题。 一、自定义ListView的必要性 系统自带的ListView默认并未提供单选模式,而是多选或全选。当用户需要在列表中选择一个项目...
这篇内容将详细介绍如何在Android中实现这些功能。 一、下拉刷新 下拉刷新功能让用户能够通过在ListView顶部向下拉动来更新列表数据。实现这一功能的关键是使用SwipeRefreshLayout。首先,在XML布局文件中添加...
以上就是关于“android dialog嵌套ListView”实现的基本步骤,包括创建自定义布局、适配器、设置点击事件以及在`Dialog`中显示`ListView`。通过这种方式,我们可以在`Dialog`中展示丰富的列表数据,并允许用户进行...
在Android开发中,ListView是一个非常重要的控件,它允许开发者在一个垂直滚动的列表中展示大量数据。本篇文章将深入探讨ListView的基本用法、工作原理以及优化策略,旨在帮助你掌握这个核心组件。 **1. ListView的...
这篇博客"Android下Listview的onItemClick以及onItemLongClick等易模糊问题验证"可能探讨了在实现这些监听器时常见的问题和解决方案。 首先,`onItemClick`方法是当用户点击ListView中的一个项目时被调用。它接收`...
Android ListView 之 自定义Adapter 实现列表条目功能,以及 OnItemClickListener(点击事件) OnScrollListener(滑动事件)事件监听 目录 Android ListView 之 自定义Adapter 实现列表条目功能,以及 ...
本篇将详细介绍如何在Android中使用ListView,包括基本用法、自定义适配器以及优化策略。 一、ListView的基本使用 1. XML布局添加ListView 首先,在布局文件中,我们需要添加一个ListView元素,设置其ID以便在代码...
类似于上面的方法,也可以在`OnItemClickListener`的`onItemClick()`方法中处理焦点问题。但这种方法可能在快速滚动时触发多次,因此需要适当控制。 4. **自定义Adapter**: 在自定义Adapter中,可以重写`getView...
在Android开发中,ListView是一种非常常见的控件,用于展示大量数据的列表形式。它具有高度可定制性,能够实现各种自定义布局和交互效果。本教程将深入讲解如何实现一个基本的ListView,并在用户点击列表项时跳转到...
本教程将引导你实现一个简单的仿通讯录ListView小例子,通过这个实例,你可以学习到如何在Android中有效地利用ListView来创建交互式用户界面。 首先,我们需要了解ListView的基本结构。ListView由多个列表项(list ...
为了响应用户的操作,我们需要设置ListView的OnItemClickListener和OnItemLongClickListener。当选中状态改变时,我们可以更新Adapter中的选中状态,并可能需要同步到其他数据结构(如数据库)。 ```java listView....
在Android开发中,...通过实践这个简单的ListView例子,你可以深入理解Android中列表视图的使用,为以后的开发工作打下坚实的基础。在实际项目中,你可能会遇到更复杂的需求,但只要掌握了基本原理,就能灵活应对。
1. 设置OnItemClickListener:为了监听ListView的点击事件,我们需要为ListView设置一个OnItemClickListener。当用户点击列表项时,会触发onItemClick()方法。 ```java listView.setOnItemClickListener(new ...
以下是一些关于如何在Android中使用ListView创建表格形式的知识点: 1. **理解ListView**: ListView是Android中的一个视图组件,它能够显示一列可滚动的数据项。通常,ListView会与Adapter配合使用,Adapter负责...
在Android开发中,`PopupWindow`是一个非常实用的组件,它可以用来实现各种形式的弹出窗口,如下拉菜单、提示框等。本教程将详细讲解如何使用`PopupWindow`来创建一个以`ListView`形式展示的菜单。首先,我们需要...
本教程将深入讲解如何在Android中使用ListView来实现表格布局,以及如何进行自定义以满足可变长度的表格布局需求,并添加简单的行组件单击事件。 首先,要实现基本的表格布局,我们需要创建一个自定义的列表项布局...
本篇文章将深入探讨如何在Android中使用ListView,包括基本配置、适配器(Adapter)的使用以及一些优化技巧。 首先,我们需要在布局文件中添加ListView元素。在XML布局中,你可以这样定义一个ListView: ```xml ...
在Android开发中,ListView是一种常用的组件,用于展示大量的列表数据。ListView通过适配器(Adapter)将数据绑定到视图上,实现数据与界面的交互。在这个特定的场景下,我们关注的是如何实现ListView的第一行或者...
总之,要在Android中实现ListView的单选功能,关键在于创建一个带有选中状态的数据模型,自定义适配器以显示选中状态,以及设置点击事件来更新选中状态。在实际开发中,你可能还需要考虑其他因素,如动画效果、多...
总之,Android中的ListView单击事件处理是开发者必备的技能之一。通过理解ListView的工作原理,适当地设置监听器,并处理好点击事件,可以创建出交互丰富的应用程序。在这个过程中,不断优化性能和用户体验,将使你...