自定义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内部控件操作方法相关推荐

  1. Android ListView item里控件的监听

    在进行android开发的时候,我们会经常遇到,需要监听listview的item的控件(如button)的问题,比如点击item的图片跳转详情页,音乐列表里的item都有一个播放按钮,点击这个播放按 ...

  2. android cbox listview特效,关于Listview和Checkbox控件嵌套出现的各种问题(Recyclerview也适用)...

    前言 随着安卓开发的深入了解,越来越发现,很多看似简单的东西,在没有思路的情况下,盲目去写,会发现写到最后,连自己都感觉各种漏洞和问题, 其实这个问题也是我的亲身经历, 当初我在面对Listview和 ...

  3. DataList控件嵌套,激发内部控件事件

    DataList控件在嵌套的时候,内部控件都没有事件了,如果想激发事件,需要自己写事件.需要在外部DataList控件的ItemDataBound事件中给内部控件定义事件.但是要在内部控件绑定数据源之 ...

  4. VB 控件分类----内部控件;ActiveX 控件;可插入的对象

    控件分类,控件概述 时间:2009-6-18 20:19:33 点击:1158 控件分类 在Visual Basic中,控件可分成三类: 1.内部控件,例如 CommandButton 和 Frame ...

  5. 扩展ToolBarManager、ListView和Grid控件以实现气球式的ToolTip

    扩展ToolBarManager.ListView和Grid控件以实现气球式的ToolTip 原文:扩展ToolBarManager.ListView和Grid控件以实现气球式的ToolTip inf ...

  6. Android 绿豆通讯录【 SQLite数据库(增删改查、展示数据) + ListView数据展示控件(展示所有数据) 】

    前情提要:Android 数据库(SQLite) [简介.创建.使用(增删改查.事务.实战演练).数据显示控件(ListView.Adapter.实战演练-绿豆通讯录)] https://blog.c ...

  7. 『安卓』安卓开发基础--基本控件

    1. Textview 显示文字,相当于Panel.一般用来文本展示,继承自android.view.View,在android.widget包中. <TextView//控件id androi ...

  8. Qt-C++基础界面开发(2- 简单Display Widget控件和Item Widget控件的使用)

    Qt-C++基础界面开发 1 Display Widget控件的简单使用 1.1 label控件的基本操作 1.2 textBrowser控件的基本操作 1.3 LCD Number控件的基本操作 1 ...

  9. ListView动态添加控件

    在项目中有时候要用到ListView动态添加一些Item,今天研究了一下,一贯还是使用BaseAdapter 创建一个AddNumberBaseAdpater类用来适配ListView import ...

最新文章

  1. 系统性能优化 1-1 Redis删除key和字符串拼接
  2. UGUI 下拉滚动框
  3. html图像特征提取,图像识别之图像特征提取
  4. 2-jQuery - AJAX load() 方法【进阶篇】
  5. (pytorch-深度学习系列)pytorch实现多层感知机(手动定义模型)对Fashion-MNIST数据集进行分类-学习笔记
  6. 【Java中级篇】基于jxl读写Excel文件遇到的问题
  7. 二进制指数类型退避算法
  8. 如何简化React应用程序中的状态-轻松实现Redux
  9. css框模型、定位、浮动
  10. 小程序入门学习09--云开发02
  11. (面试题)html中创建模态窗口的方法有哪些?
  12. 2017极客大奖评选进行时:年度十大消费科技产品花落谁家
  13. Postgis使用工具raster2pgsql批量导入栅格数据(二)
  14. DSPE-PEG9-Mal纯度是95%以上的单分散小分子PEG试剂
  15. 小学期破防:BIT计科大二小学期的个人见解以及建议
  16. 万字详解大数据平台异地多机房架构实践
  17. KVM 核心技术详解
  18. java中的进制转换(十进制和二进制)
  19. 广州大学学生实验报告,数据结构实验,二叉树的操作与实现
  20. 国内医院临床自闭症病例分享:大脑自闭了,为什么是肠道的锅?

热门文章

  1. 身份证验证大全-javascript
  2. Java内存模型与GC
  3. 机器学习中的过拟合与解决办法
  4. 单说庐阳区高企申报:合肥市庐阳区2022年高企申报范围材料程序要求
  5. C语言实现从键盘输入年月日,输出该月的天数
  6. mac系统中Safari浏览器网页如何保存至备忘录Notes?
  7. 安徽省2018工程计价电子版_安徽省住房城乡建设厅发布2018版安徽省建设工程计价依据的通知...
  8. 27.1.1 图表控件概述
  9. JavaScript学习之大小写转换
  10. unity学习之URP多相机以及多通道渲染