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

Android开发入门:基于SQLite与ListView的通讯录项目实战 在Android应用开发中,数据持久化与动态展示是构建功能完整应用的核心基础。SQLite作为Android内置的轻量级关系型数据库,提供了本地结构化数据存储的解决方案,其通过SQL语句和事务机制实现对数据的增删改查操作。ListView则是早期Android系统中实现高效列表展示的关键控件,它基于适配器模式将数据源与视图项绑定,并通过视图复用机制优化滚动性能。掌握SQLite与ListView的组合使用,不仅能帮助开发者理解Android数据层与UI层交互的基本原理,也为后续学习Room、Recycler 阅读详情

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

解决办法:

最近在使用Listview又遇到了以前碰到的问题,当Listview的某一行有button存在时,无法弹出contextMenu,干脆把Listview几个容易产生疑惑的问题一起梳理了一下。 

首先在Activity的布局中放置一个ListView,然后setContentView加载此布局不再详表。 
其次实现一个从BaseAdapter继承的类,以提供给ListView显示的内容。 

Java代码  收藏代码
  1. private class DemoAdapter extends BaseAdapter {  
  2.   
  3.         public int getCount() {  
  4.             return 2;  
  5.         }  
  6.   
  7.         public Object getItem(int position) {  
  8.             return position;  
  9.         }  
  10.   
  11.         public long getItemId(int position) {  
  12.             return position;  
  13.         }  
  14.   
  15.         public View getView(int position, View convertView, ViewGroup parent) {  
  16.             if(position == 0) convertView = getLayoutInflater().inflate(R.layout.btn_item, null);  
  17.             else convertView = getLayoutInflater().inflate(R.layout.tv_item, null);  
  18.             return convertView;  
  19.         }  
  20.           
  21.     }  

代码很简单,就是返回2行待显示的内容。一行带一个button,一行不带,效果如下。 
 

做好准备后开始验证以下几个问题: 
1.ListView本身可不可以调用setOnClickListner()? 
代码上可以,但是运行马上会丢出异常,所以是不可以拦截Listview本身的click事件。 
2.ListView.setOnItemClickListener设置的listener什么时候会被调用? 
当点击某行内容是会被调用,但是如果这行内容中包含Button,ImgButton等控件时就不会被调用,为什么以及怎么解决见后面。 
3.ListView.setOnItemLongClickListener设置的listener什么时候被调用? 
当长按某一行时会被调用,而且在抬起之前就已经调用了。 
4.收到LongClick的调用后还会调用click吗? 
这个要根据LongClick listener的返回值来决定。 
Java代码  收藏代码
  1. lv.setOnItemLongClickListener(new OnItemLongClickListener() {  
  2.             public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {  
  3.                 System.out.println("Item LONG clicked. Position:" + position);  
  4.                 return false;  
  5.             }  
  6.         });  

如果返回false那么click仍然会被调用。而且是先调用Long click,然后调用click。 
如果返回true那么click就会被吃掉,click就不会再被调用了。 
5.监听click以及long click影响弹出菜单吗? 
click不影响;long click如果返回true那么就会吃掉click事件,导致菜单不能弹出。 
6.如果让包含button的item也能弹出菜单,回调click以及long click的监听器呢? 
查看Android源代码,查看源代码,发现在AbsListView.onTouchEvent中有调用View.hasFocusable(),所以只要设置button属性: 
Xml代码  收藏代码
  1. android:focusable="false"  

另外还要设置 
Xml代码  收藏代码
  1. android:longClickable="true"  

否则无法收到long click。 
这样就可以看到有button没有button的item行为就统一了。 

PS: 
如果包含的Button是ImageButton,那么在xml中设置了android:focusable="false"属性在当前版本是无效的,必须在代码中,再次呼叫函数ImageButton.setFocusable(false)设置一次。 
或者: 
在父Item里面加上android:descendantFocusability="blocksDescendants" 

以上基本上就是Listview使用时常见问题了,在配合上前面博文提到的手势处理,很多Listview的使用就都包含了。

http://mypyg.iteye.com/blog/850624

Android ListView position详解及实例代码 我们在使用ListView的时候,一般都会为ListView添加一个响应事件android.widget.AdapterView.OnItemClickListener。对OnItemClickListener的position和id参数,我相信有些人在这上面走了些弯路。     在使用listview的时候,我们经常会在listview的监听事件中,例如OnItemClickListener(onItemClick)中,或listview的adapter中(getView、getItem、getItemId等)看到position这个变量。在我们没有为listview添加headerView 立即下载

相关推荐

本地如何安装midscene.js运行环境

手把手教你本地安装midscene.js运行环境

实践助梦想成长 2608

Android ListView OnItemLongClick和OnItemClick事件内部细节分享以及几个比较特别的属性...

本文转自http://blog.sina.com.cn/s/blog_783ede030101bnm4.html 作者kiven 辞职3,4个月在家休息,本以为楼主要程序员逆袭,结果失败告终继续码农生涯今天开始更新博客。 正文。 项目中有个ListView内容比较复杂现在要添加长按删除功能。楼主自然想到利用ListView的onItemLongClick事件来处...

429

做形态学方法的团队_“设计形态学”与“第三自然”

文/邱松(清华大学 美术学院)摘要:“设计形态学”是基于“形态学”研究的设计基础学科。“形态”既是该学科研究的主体,又是与其它学科相连接的“纽带”。实际上,不管是供养我们的地球家园,还是神秘莫测的浩瀚宇宙,均由数量纷繁、千姿百态的“形态”构筑而成。形态通常被分成两大类:一类是源于“第一自然”的“自然形态”;另一类是来自“第二自然”的“人造形态”。而这两类形态正是“设计形态学”研究的两条...

weixin_31548723的博客 2683

android onitemlongclick参数,在Android中使用弹出菜单实现OnItemLongClickListener到Android的ListView...

我有一个listview,我已经保存了一个弹出式菜单。所以我可以在长按一个listview项目时弹出菜单。我的弹出式菜单方法如下:在Android中使用弹出菜单实现OnItemLongClickListener到Android的ListViewvoid delete(){listView.setOnItemLongClickListener(new AdapterView.OnItemLongCl...

weixin_35521169的博客 392

基于Windows环境的OGG远程抽取异常(经典模式)OGG-02830 Formatting error

MOS提供的解决方法,根据MOS的提示是由于使用的OGG版本太新了,经典模式下已经弃用了这种远程抽取方式。问题:Windows环境下启用远程抽取ADG备库的数据,在启动抽取进程的时候出现如下错误提示。

Mrzhou的博客 379

精益六西格玛Python数字化应用开发-Day18 应用场景:家电企业生产效率优化

本文将重点介绍专门针对精益六西格玛黑带使用场景的 Python 库,这些库功能侧重于数据分析和流程优化,特别适用于 DMAIC 方法论和看板管理。考虑到读者具备中高级Python 使用经验,我们将深入探讨各库的高级功能和实际应用应用场景。 某家电企业生产线自动化程度高,数据量巨大,希望通过精益管理提升生产效率。企业借助 Python 脚本,打通各类数据源(MES、ERP、设备日志),自动归集生产数据,分析各工序的生产节拍、设备停机、效率损失,快速定位瓶颈环节

m0_56592100的博客 905

android onitemlongclick参数,Android ListView OnItemLongClick和OnItemClick事件内部细节分享...

Android使用ListView应该注意的地方在ListView中设置Selector为null会报空指针?mListView.setSelector(null);//空指针试试下面这种:mListView.setSelector(newColorDrawable(Color.TRANSPARENT));如何让ListView初始化的时候就选中一项?ListView需要在初始化好数据后,其中一项...

weixin_33240862的博客 377

在 SAP BTP ABAP 环境中测试多租户 SaaS 解决方案的完整实践指南

ABAP SaaS测试阶段关键实践 在SAP BTP ABAP环境中开发多租户SaaS解决方案时,测试阶段(TST)对确保产品质量尤为关键。测试阶段应包含两个主要维度: 业务功能验证: 通过软件组件管理确保测试环境与代码仓库同步 创建并验证业务角色分配,确保权限配置正确 测试Fiori Launchpad导航流程和跨应用跳转 验证inbound/outbound通信配置 自动化质量管控: 在开发环境(DEV)执行本地ATC检查和单元测试 通过ABAP Test Cockpit(ATC)进行代码质量检查 集成

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 297

Android--ListView作用详解

1.ListView   ListView列表视图控件是Android中常用的控件之一,其直接继承了AbsListView,是一个以垂直方式在项目中显示View视图的列表。ListView的数据项,来自一个继承了ListAdapter接口的适配器。   ListView的常用属性一般就是用来设置列表的间隔、分割线、表头、表尾等属性的,常用属性有以下几个,并且Android也为其提供了对应的se...

streate的专栏 5705

Matplotlib之bar3d画3D柱状图

3D柱状图通常用于展示数据集中不同分类项的数据大小或数量。与普通的柱状图相比,3D柱状图更适合展示数据的三个维度 3D 柱状图 按行/列涂颜色 柱加阴影、描黑边 自定义座标轴名、刻度标签、范围

我走的每一步都算数 1121

IPGUARD客户端与应用程序冲突

客户端与应用程序冲突 症状 安装客户端之后,客户端的某些程序无法运行或使用过程中出现异常,卸载客户端后恢复正常。 原因分析 可能是客户端的某些功能与应用程序发生冲突导致。 解决方法 当出现这样的情况时,可以按照以下步骤确认。 步骤1:屏蔽主动注入 在客户端配置策略中,增加配置策略hookapi_disinj,值为1;待策略同步到客户端后,重启客户端确认问题是否解决。如果解决,则转到...

IP-Guard专栏 1410

Android基础--ListView的常用事件回调 OnItemClickListener,OnItemLongClickListener,onScrollListener

OnItemClickListener public interface OnItemClickListener { void onItemClick(AdapterView<?> parent, View view, int position, long id); } 注意我们在点击单条item的时候,会去拿该item数据,我们一般是这么拿如下: Objec...

yanwenyuan0304的专栏 1284

第154章 点云大规模并行处理(GPU加速)

优化点云处理✨ 使用。

yumeiguo的博客 374

onItemClick以及onItemLongClick等易模糊问题验证

onItemClick以及onItemLongClick等易模糊问题验证 收藏到手机  转发   评论 2011-12-11 14:27   最近在使用Listview又遇到了以前碰到的问题,当Listview的某一行有button存在时,无法弹出contextMenu,干脆把Listview几个容易产生疑惑的问题一起梳理了一下。 首先在Activity的布局中放置一个

shangmin1990的专栏 379

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【Android】参考来源

http://www.ourunix.org/android/search.asp?q=Intent

憂鬱の時節 407

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Android记事本开发实战:从SQLite到RecyclerView的完整项目解析

在移动应用开发中,数据持久化是核心基础技术之一,它决定了应用如何存储和管理用户数据。其原理通常涉及本地数据库操作,如使用SQLite进行结构化数据存储,并通过CRUD(增删改查)接口实现数据管理。这项技术的价值在于为应用提供稳定、高效的离线数据支持,是构建功能完整应用的关键。在Android开发领域,数据持久化广泛应用于笔记、待办事项、通讯录等需要本地存储的场景。本文聚焦于一个经典的Android记事本应用实现,详细拆解了如何使用原生SQLite和RecyclerView构建一个具备完整CRUD功能的应用。

weixin_30753873的博客 349

android listview item长按事件,ListView的点击事件,长按事件,数据刷新

1、刷新数据当List中的数据发生改变时,使用listViewAdapter.notifyDataSetChanged();通知Adapter刷新数据。在Activity中找到ListView,为ListView设置我们自己写的Adapter,自己的Adapter,继承自BaseAdapter,实现四个方法,在ListView中定义两个变量,一是Context mContext,另一个是Array...

weixin_39737317的博客 615

Android ListView的长按事件

Android ListView的长按事件。

shanhe_yuchuan的博客 922

android中为listview同时设置长按项onItemLongClick和点击事件onItemClick出现的问题

当我在完成代码设计之后发现,

u012498660的专栏 1992

Android之ListView数据错误解决方法

我们在使用ListView时候,可能会遇到数据错乱问题:普通的数据错乱(如“点赞”按钮/图标的数据错乱)、CheckBox的数据错乱

jscly的博客 1393

Android listView典型错误分析(经验体会)

1.无法获得一个view的onClick,onLongClick等点击事件,是因为其中的特殊子控件,默认获得了焦点,应该设置android:focusable="false" a.如下面这样的List,无法响应list的onItemClick,(是因为其中的特殊子控件button,默认获得了焦点,应该设置android:focusable="false") b.Expandab...

weixin_34326179的博客 395

listview显示异常

做个点赞的小手,如果点赞了,那小手变色。当滑动后。下一层的小手也变色了。是listview中getview方法的convertView复用了 。 解决方案,就是绑定数据,在点击的按钮上,settag(数据data),然后onclick(view v) 中取出v.gettag().这样完成了数据绑定。 在getview中设置小手显示时,可以拿来判定是否需要显示了。 ...

weixin_34110749的博客 301

关于ListView的报错

错误例子: public View getView(int position, View convertView, ViewGroup parent) { People people = getItem(position); View view; if (convertView == null) { view = LayoutInflater.from(getContext()).i

bboyying的专栏 792

listview之一些常见问题的解决方法

android中Listview使我们经常使用的控件,一般常规的用法就是在布局文件中定义然后在Activity使用findViewById()找到,然后定义一个listview每一项的布局文件,在adapter中getView方法里Inflate该XML文件得到一个view返回,最后给listview设置该适配器。其中adapter有如下几种: 1、ArrayAdapter,只能用来适配list

欢乐斗佛的博客 7万+

ListView错误

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); peopleInit(); MyAdapter adapter = new MyAdapter(MainActivity.this

bboyying的专栏 532
上一篇: Android 2.3.3 SDK 源代码关联Eclipse ?
下一篇: GET 和 POST 请求内容的区别?
MQMaoQiang
博客等级 码龄18年 25粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值