安卓listview item内部控件操作方法
自定义listview使用司空见惯,很多时候需要对listview中某一行的内部控件进行操作,加载动画等。本文就如何获取内部空间进行操作简述一下方法。
第一种方法,通过listview的getchildAt(position)方法。实例代码如下:
ImageView img_del = (ImageView) dragSortListView.getChildAt(position).findViewById(R.id.img_del);
img_del.setImageResource(R.drawable.icon_load);
获取到布局后再findviewbyid可以获取到控件对象,之后可进行操作。但是getchildAt这种方法存在问题,getchildAt中的position并不是list中的下标,而是返回的本页面可见的listitem的下标,正确做法是dragSortListView.getChildAt(position - listview.getFirstVisiblePosition())这样可以获取到正确的位置。getFirstVisiblePosition是指当前list view界面的一个item的position。这样可以实现对某一行中的控件进行控制操作。
但是如果需要保存当前listview中执行状态上述方法并不可行。若listview中存放的是表示一系列任务的执行,第一种造成了数据错乱。如下图,需要执行一系列的ping任务,未执行前显示等待标志,执行中加载旋转动画,执行后显示执行结果。
第二种方法,再自定义的adapter的getview方法中预先写好对于不同的结果的应对,代码如下:
viewHolder.pingAddress.setText(item.getAddress());if (item.getState() == 1)//未执行状态viewHolder.img_progress.setImageResource(R.drawable.ic_wait);else if (item.getState() == 2)//成功状态viewHolder.img_progress.setImageResource(R.drawable.icon_suc);else if (item.getState() == 3)//失败状态viewHolder.img_progress.setImageResource(R.drawable.ic_fail);if (item.isTest()) {//正在运行状态viewHolder.img_progress.setImageResource(R.drawable.icon_load);viewHolder.img_progress.startAnimation(operatingAnim);} elseviewHolder.img_progress.clearAnimation();
当然需要预先抽象出自定义的结果类,PingResBean存放过程参数。
当activity中的执行完任务数据数据发生了变化的时候,调用如下即可更新UI。当调用notifydatasetchanged方法时会重新调用adapter中的getview方法,重新绘制listview的UI,这样即可达到对listitem内部空间的控制更新到目的,并且可以保存状态,避免listview数据加载错乱。
case MessageWhat.THREAD_START:position = (int) msg.obj;//对应list着数据的位置Log.i("PINGPING", position + "THREAD_START");pingList.get(position).setTest(true);//改变list中元素的属性adapter.setDataList(pingList);adapter.notifyDataSetChanged();//通知刷新break;
给出getview方法完整实现:
@Overridepublic View getView(int position, View convertView, ViewGroup parent) {PingResBean item = (PingResBean) getItem(position);ViewHolder viewHolder;if (convertView == null) {viewHolder = new ViewHolder();convertView = LayoutInflater.from(mcontext).inflate(R.layout.listitem_drag_ping, null);viewHolder.pingAddress = (TextView) convertView.findViewById(R.id.item_tv_ping_address);viewHolder.img_del = (ImageView) convertView.findViewById(R.id.img_del);viewHolder.img_progress = (ImageView) convertView.findViewById(R.id.img_progress);convertView.setTag(viewHolder);} else {viewHolder = (ViewHolder) convertView.getTag();}viewHolder.pingAddress.setText(item.getAddress());if (item.getState() == 1)//未执行状态viewHolder.img_progress.setImageResource(R.drawable.ic_wait);else if (item.getState() == 2)//成功状态viewHolder.img_progress.setImageResource(R.drawable.icon_suc);else if (item.getState() == 3)//失败状态viewHolder.img_progress.setImageResource(R.drawable.ic_fail);if (item.isTest()) {//正在运行状态viewHolder.img_progress.setImageResource(R.drawable.icon_load);viewHolder.img_progress.startAnimation(operatingAnim);} elseviewHolder.img_progress.clearAnimation();return convertView;}
特记下,以备后日回顾。
安卓listview item内部控件操作方法相关推荐
- Android ListView item里控件的监听
在进行android开发的时候,我们会经常遇到,需要监听listview的item的控件(如button)的问题,比如点击item的图片跳转详情页,音乐列表里的item都有一个播放按钮,点击这个播放按 ...
- android cbox listview特效,关于Listview和Checkbox控件嵌套出现的各种问题(Recyclerview也适用)...
前言 随着安卓开发的深入了解,越来越发现,很多看似简单的东西,在没有思路的情况下,盲目去写,会发现写到最后,连自己都感觉各种漏洞和问题, 其实这个问题也是我的亲身经历, 当初我在面对Listview和 ...
- DataList控件嵌套,激发内部控件事件
DataList控件在嵌套的时候,内部控件都没有事件了,如果想激发事件,需要自己写事件.需要在外部DataList控件的ItemDataBound事件中给内部控件定义事件.但是要在内部控件绑定数据源之 ...
- VB 控件分类----内部控件;ActiveX 控件;可插入的对象
控件分类,控件概述 时间:2009-6-18 20:19:33 点击:1158 控件分类 在Visual Basic中,控件可分成三类: 1.内部控件,例如 CommandButton 和 Frame ...
- 扩展ToolBarManager、ListView和Grid控件以实现气球式的ToolTip
扩展ToolBarManager.ListView和Grid控件以实现气球式的ToolTip 原文:扩展ToolBarManager.ListView和Grid控件以实现气球式的ToolTip inf ...
- Android 绿豆通讯录【 SQLite数据库(增删改查、展示数据) + ListView数据展示控件(展示所有数据) 】
前情提要:Android 数据库(SQLite) [简介.创建.使用(增删改查.事务.实战演练).数据显示控件(ListView.Adapter.实战演练-绿豆通讯录)] https://blog.c ...
- 『安卓』安卓开发基础--基本控件
1. Textview 显示文字,相当于Panel.一般用来文本展示,继承自android.view.View,在android.widget包中. <TextView//控件id androi ...
- Qt-C++基础界面开发(2- 简单Display Widget控件和Item Widget控件的使用)
Qt-C++基础界面开发 1 Display Widget控件的简单使用 1.1 label控件的基本操作 1.2 textBrowser控件的基本操作 1.3 LCD Number控件的基本操作 1 ...
- ListView动态添加控件
在项目中有时候要用到ListView动态添加一些Item,今天研究了一下,一贯还是使用BaseAdapter 创建一个AddNumberBaseAdpater类用来适配ListView import ...
最新文章
- 系统性能优化 1-1 Redis删除key和字符串拼接
- UGUI 下拉滚动框
- html图像特征提取,图像识别之图像特征提取
- 2-jQuery - AJAX load() 方法【进阶篇】
- (pytorch-深度学习系列)pytorch实现多层感知机(手动定义模型)对Fashion-MNIST数据集进行分类-学习笔记
- 【Java中级篇】基于jxl读写Excel文件遇到的问题
- 二进制指数类型退避算法
- 如何简化React应用程序中的状态-轻松实现Redux
- css框模型、定位、浮动
- 小程序入门学习09--云开发02
- (面试题)html中创建模态窗口的方法有哪些?
- 2017极客大奖评选进行时:年度十大消费科技产品花落谁家
- Postgis使用工具raster2pgsql批量导入栅格数据(二)
- DSPE-PEG9-Mal纯度是95%以上的单分散小分子PEG试剂
- 小学期破防:BIT计科大二小学期的个人见解以及建议
- 万字详解大数据平台异地多机房架构实践
- KVM 核心技术详解
- java中的进制转换(十进制和二进制)
- 广州大学学生实验报告,数据结构实验,二叉树的操作与实现
- 国内医院临床自闭症病例分享:大脑自闭了,为什么是肠道的锅?