Android之提升ListView的运行效率

驱动钛丝(SMA)的应用(5)汽车腰托气阀常见问题及解决方案 财哥在前段时间发布的《驱动钛丝(SMA)的应用(1)汽车腰托支撑按摩气阀模块》一文,引发了很多企业的拜访和交流。 目前很多厂家已经启动或正在进行相关研发,同时也遇到了诸如:钛丝选型、驱动位移、响应设计、温度控制、力量设计、点动滞后、铆接工艺、量化生产等问题。 阅读详情

之所以说ListView这个空间很难用,就是因为它有很多细节可以优化,其中运行效率就是很重要的一点。目前我们ListView的运行效率是很低的,因为在FruitAdapter的getView()方法中,每次都将布局重新加载了一遍,当ListView快速滚动的时候,这就会成为性能的瓶颈。

仔细观察会发现,getView()方法中还有一个convertView参数,这个参数用于将之前加载好的布局进行缓存,以便之后可以进行重用。
可以看到,现在我们在getView()方法中进行了判断,如果convertView为null,则使用LayoutInflater去加载布局,如果不为null则直接对cnvertView进行重用。这样就大大提高了ListView的运行效率,在快速滚动的时候也可以表现出更好的性能。
不过,目前我们的这份代码还是可以继续优化的,虽然现在已经不会再重复去加载布局,但是每次在getView()方法中还是会调用View的findViewById()方法来获取一次控件的实例。
我们可以借助一个ViewHolder来对这部分性能进行优化,修改FruitAdapter中的代码,如下所示:

package net.nyist.lenovo.listviewtest;


import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

public class FruitAdapter extends ArrayAdapter<Fruit>{

private int resourceId;

public FruitAdapter(Context context, int textViewResourceId, List<Fruit>objects){
    super(context,textViewResourceId,objects);
    resourceId = textViewResourceId;
}


@Override
public View getView(int position,  View convertView,  ViewGroup parent) {
    Fruit fruit = getItem(position);//获取当前项的Fruit实例
    View view;
    ViewHolder viewHolder;
    if (convertView==null){
        view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
        viewHolder = new ViewHolder();
        viewHolder.fruitImage = (ImageView)view.findViewById(R.id.fruit_image);
        viewHolder.fruitName = (TextView)view.findViewById(R.id.fruit_name);
        view.setTag(viewHolder);//将ViewHolder存储在View中。
    }else {
        view = convertView;
    }
    ImageView fruitImage = (ImageView)view.findViewById(R.id.fruit_image);
    TextView fruitName = (TextView)view.findViewById(R.id.fruit_name);
    fruitImage.setImageResource(fruit.getImageId());
    fruitName.setText(fruit.getName());
    return view;
}
class ViewHolder{
    ImageView fruitImage;
    TextView fruitName;
}
}

我们新增加一个内部类ViewHolder,用于对控件的实例进行缓存。当convertView为null的时候,创建一个ViewHolder对象,并将控件的实例都存放在ViewHolder里,然后调用View的setTag()方法,将ViewHolder对象存储在View中,当convertView不为null的时候,则调用View的getTag()方法,把ViewHolder重新取出。这样所有控件的实例都缓存在了ViewHolder里,就没有必要每次都通过findViewById()方法来获取控件的实例了。
通过这两步优化之后,我们ListView的运行效率就已经非常不错了。

ArcGIS | 全球新冠肺炎地图数据下载和处理 ArcGIS 阅读详情

相关推荐

手把手教你用6轴IMU跑通LIO-SAM:参数配置与代码修改保姆级教程

本文提供了一套完整的6轴IMU适配LIO-SAM的解决方案,包括参数配置与代码修改的详细步骤。从理解6轴与9轴IMU的关键差异入手,逐步指导如何调整核心配置文件params.yaml、重构utility.h关键函数、优化mapOptimization.cpp的位姿融合逻辑,并给出编译验证与性能调优建议,帮助开发者快速实现6轴IMU在LIO-SAM中的稳定运行。

weixin_28717807的博客 357

提升ListView运行效率两个方法

一、首先我们先实现ListView的构建工作 1.定义一个实体类,作为ListView适配器的适配类型。新建Fruit类,代码如下: package org.lxh.demo; public class Fruit { private String name; private int imageId; public Fruit(String name, int image

张亚运的专栏 2307

使用ShaderGraph制作URP各向异性

URP上用shaderGraph实现各向异性效果,解决只能用shader的问题

dreamform的专栏 1099

android中的ListView数据量大时如何提高效率。。。。

数据量大,这牵涉到2个问题。 1. 一个空ListView加载的数据项很多 2. 已加载很多数据项的ListView如何优化效率 对于问题1:一个空ListView加载的数据项很多 一般就是动态加载,仅在需要加载的时候加载数据项。 比如View只能显示10项,当滚动到第10项时,我们才加载后面的N(N根据实际情况判定)项。 这就需要监听滚动消息,很好

听闻的博客 3281

全球、中国各省市县等行政区划(含十段线)shape及geosjon数据免费下载

免费下载全球、中国各省市县等行政区划(含十段线)shape及geosjon数据

mhf403445651的博客 3460

大模型训练中的AllReduce:从原理到实战,如何优化你的分布式训练效率

本文深入解析了大模型分布式训练的核心通信操作AllReduce,特别是高效的Ring All-Reduce算法原理。文章从实战角度出发,探讨了如何通过通信计算重叠、梯度累积策略、NCCL库调优以及混合并行通信优化等手段,有效降低通信开销,从而显著提升大模型训练效率。

julia4scientist的博客 524

Listview优化之convertView,viewHolder

1,本文中的代码来自《第一行代码》参考链接:http://blog.youkuaiyun.com/pkxiuluo01/article/details/7380974 http://blog.youkuaiyun.com/kongzhichen/article/details/10721197 http://www.cnblogs.com/xiaowenj

初心 2006

Lumerical-定向耦合器1

概述:本文章使用FDE求解器对定向耦合器进行了数值仿真,讨论了耦合器的间距相关性,耦合长度相关性,波长相关性。讨论了脊形波导和条形波导两种情况。

m0_61776728的博客 4614

优化ListView的加载效率

利用convertView优化性能,较少View的创建                                                                                        利用viewHolder优化性能,较少findViewById的创建 ...

Beginniqg 396

FMCW毫米波雷达原理一

1、简介 毫米波雷达的优点是角分辨率高、频带宽因而有利于采用脉冲压缩技术、多普勒颇移大和系统的体积小。目前笔者接触到的有24G毫米波雷达和77G毫米波雷达。 24G毫米波雷达主要应用在交通领域的测距和车辆测速,在其他领域也有使用24G毫米波雷达。 77G毫米波雷达主要应用在无人驾驶,汽车周围的目标检测等领域。 在首次接触雷达时,一头雾水。搞不清一个chirp的时域图和频域图的关系、中频信号以及其他名词的基本概念。在TI培训官网上看到一些毫米波雷达原理的视频才豁然开朗。TI培训官网毫米波传感介绍 本文主要是通

擎天柱工坊 8144

phpMyAdmin | mysqli::real_connect(): (HY000/2002): No such file or directory

第一次安装宝塔mysql服务是默认关闭的,需要手动打开,打开服务再次进入phpMyAdmin发现可以进入了。

吻等离子的博客 2872

Android ListView getView多次不规律调用问题

今天偶然发现ListView的getView方法会执行多次,一共只有3个Item,getView却调用了n次,代码如下 @Override public View getView(int position, View convertView, ViewGroup parent) { System.out.println("-->>getView:"+position+" "+conver

vegeta的专栏 1014

手把手完整实现STM32+ESP8266+MQTT+ThingsCloud云平台+Android App及iOS App及微信小程序及Web App应用

本教程文章完整记录实现STM32+ESP8266+MQTT+ThingsCloud云平台+Android App及iOS App及微信小程序及Web App应用。

嵌入式阿齐Archie 1万+

安卓开发:提升ListView的运行效率

ListView绝对可以称得上是Android中最常用的控件之一,几乎所有的应用程序都会用到它,由于手机屏幕空间有限,能够一次性在屏幕上显示的内容不多,当我们的程序中有大量数据需要显示时,就可以借助ListView来实现。我们来看一下ListView适配器的普通写法,下面是一个适配器的事例代码:public class FruitAdapter extends ArrayAdapter<Fruit>

你的同学仔鸡肠 721

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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

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

【Android】43、提升ListView 的运行效率

本篇介绍提升ListView 的运行效率

思跡的博客 473

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Android:提升ListView的运行效率

我们都知道ListView这个控件很难用,因为它有很多的细节可以优化,其中运行效率就是很重要的一点。目前我们ListView的运行效率是很低的,因为在getView()方法中每次都将布局重新加载了一遍,当ListView快速滚动的时候这就会成为性能的瓶颈。仔细观察,getView()方法中还有一个convertView参数,这个参数用于将之前加载好的布局进行缓存,以便之后可以进行重用。public

BAOLIANG196的博客 704

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Android 提升ListView的运行效率

1、描述 在getView方法中每次都将布局重新加载了一遍,当ListView快速滚动的时候这就会成为性能的瓶颈。 2、优化1 对getView方法中进行了判断,如果convertView为空,则使用LayoutInflater去加载布局,如果不为空则直接对convertView进行重用。这样就大大提高了ListView的运行效率,在快速滚动的时候也可以表现出更好的性能。 public

Ritchie 371

Android笔记——提升ListView的运行效率

之所以说 ListView这个控件很难用,就是因为它有很多的细节可以优化,其中运行效率就是很重要的一点。目前我们ListView的运行效率是很低的,因为在 FruitAdapter的getView()方法中每次都将布局重新加载了一遍,当 ListView快速滚动的时候这就会成为性能的瓶颈。 仔细观察,getView()方法中还有一个 convertView参数,这个...

weixin_30708329的博客 101

Android ListView简单使用、定制ListView、提升ListVie的运行效率

完整项目代码 https://github.com/Phil-tom/Android-The-First-Line-of-Code/tree/main/Chapter3/ListViewTest ListView的简单用法 数组的数据是无法直接传递给ListView的,需要借助适配器来完成(adapter) 其中ArrayAdapter的使用比较简单 ArrayAdapter的构造函数中依次传入当前上下文、ListView子项布局的id、以及要适配的数据。 ArrayAdapter<String&gt

guliguliguliguli的博客 298

android:提升 ListView 的运行效率

之所以说 ListView 这个控件很难用,就是因为它有很多的细节可以优化,其中运行效率 就是很重要的一点。目前我们 ListView 的运行效率是很低的,因为在 FruitAdapter 的 getView() 方法中每次都将布局重新加载了一遍,当 ListView 快速滚动的时候这就会成为性能的瓶颈。 仔细观察,getView()方法中还有一个 convertView 参数,这个参数用于...

weixin_34138056的博客 130

_019_Android_初识ListView - 定制ListView - 提升ListView运行效率

 转自https://www.cnblogs.com/izhanjun/p/4244653.html,感谢作者的无私分享。 ListView绝对可以称得上是 Android 中最常用的控件之一,几乎所有的应用程序都会用到它。由于手机屏幕空间都比较有限,能够一次性在屏幕上显示的内容并不多,当我们的程序中有大量的数据需要展示的时候,就可以借助 ListView来实现。ListView允许用户通过手指...

poiuyppp的博客 183

【Android成长之路】最常用和最难用的控件——ListView的浅谈(提升ListView 的运行效率)

天下武功,唯快不破!本篇将为简单的提升ListView的运行效率。

Just follow myself heart. 435

Android中ListView的使用(三)----- 提升ListView运行效率

在上一篇在,我们虽然实现了ListView的显示,但是,它的运行效率是极低的由于数据较少,看不出差别,当数据量较大,或者ListView快速滚动时,FruitAdapter中的getView()每次都将布局重新加载一遍,这将会变成ListView性能的瓶颈,下面的内容将会修改优化上一篇中的代码。 在getView()方法中,有一个convertView参数,这个参数用于将之前加载好的布局进行缓存

写代码的林克 774

Android Studio安卓开发--ListView学习整理

Android Studio安卓开发--ListView学习整理: ListView的简单用法;定制ListView的界面;ListView的点击事件

gyeolhada的博客 3904

Android控件之ListView

Android控件-----ListView 1.ListView的用法 ListView是安卓最常用和最难用的控件之一,它允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据则会滚动出屏幕。比如查看QQ聊天记录,阅读新闻等等。 1.1.ListView的简单用法 ListView是用于展示大量数据的,这些数据可以直接定义在数组中,可以是从网上下载的,也可以是从数据库读取的。但是,数组中的数据不能直接传递给ListView,需要借助适配器来完成。在这里我们使用ArrayAdapte

*孤兰歆 801

Android最常用的控件ListView(详解)

Android的ListView用法描述

记录分享编程与冲浪知识 7735
上一篇: Android之RecyclerView的使用
下一篇: Android之创建ListView自定义控件
菜鸟码农阿庆
博客等级 码龄10年 61粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值