提升ListView的运行效率

Android listview适配器以及提升listview的效率 Android listview适配器以及提升listview的效率。这是一个较标准的写法,listview的适配器,以及单击,长按的监听,或者listview里面其他控件的监听。 立即下载

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

仔细观察发现,getView()方法中还有一个convertView参数,这个参数用于将之前加载好的布局进行缓存,以便之后可以进行重用。修改FruitAdapter中的代码,如下所示:

package com.example.administrator.activitydemo;

import android.content.Context;
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;
    private List<Fruit> list;

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


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Fruit fruit = list.get(position);//获取当前项的Fruit实例
        View view;
        if (convertView==null){
            view=LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
        }else {
            view=convertView;
        }
        ImageView iv_name = (ImageView) view.findViewById(R.id.iv_name);//初始化图片
        TextView tv_name = (TextView) view.findViewById(R.id.tv_name);//初始化文字
        iv_name.setImageResource(fruit.getImageId());//为ImageView设置图片
        tv_name.setText("" + fruit.getName());//为TextView设置文字
        return view;
    }
}

可以看到,现在我们在getView()方法中进行了判断,如果convertView为null,则使用LayoutInflater去加载布局,如果不为null,则直接对convertView进行重用。这样就大大提高了ListView的运行效率,在快速滚动的时候也可以表现出更好的性能。

不过,目前我们的这份代码还是可以继续优化的,虽然现在已经不会再重复去加载布局,但是每次在getView()方法中还是会调用View的findViewById()方法来获取一次控件的实例。我们可以借助一个ViewHolder来对这部分性能进行优化,修改FruitAdapter中的代码,如下所示:

package com.example.administrator.activitydemo;

import android.content.Context;
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;
    private List<Fruit> list;

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


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Fruit fruit = list.get(position);//获取当前项的Fruit实例
        View view;
        ViewHolder viewHolder;
        if (convertView == null) {
            view = LayoutInflater.from(getContext()).inflate(resourceId, parent, false);
            viewHolder = new ViewHolder();
            viewHolder.iv_name = (ImageView) view.findViewById(R.id.iv_name);//初始化图片
            viewHolder.tv_name = (TextView) view.findViewById(R.id.tv_name);//初始化文字
            view.setTag(viewHolder);//将ViewHolder存储在View中
        } else {
            view = convertView;
            viewHolder = (ViewHolder) view.getTag();//重新获取ViewHolder
        }

        viewHolder.iv_name.setImageResource(fruit.getImageId());//为ImageView设置图片
        viewHolder.tv_name.setText("" + fruit.getName());//为TextView设置文字
        return view;
    }

    class ViewHolder {
        ImageView iv_name;
        TextView tv_name;
    }
}

我们新增了一个内部类ViewHolder,用于对控件的实例进行缓存。当covertView为null的时候,创建一个ViewHolder对象,并将控件的实例放在ViewHolder里,然后调用View的setTag()方法,将ViewHolder重新取出。这样所有控件的实例都缓存在了ViewHolder里,就没必要每次都通过findViewById()方法来获取控件实例了。

通过这两步优化之后,我们ListView的运行效率就已经非常不错了。

效果图:

 

整流桥选型参数,结构原理,工艺与注意问题总结 整流桥(Rectifier Bridge)是一种电子元件,它的主要作用是将交流电(AC)转换为直流电(DC)。这种转换在许多电子设备中都是必要的,因为大多数电子元件和电路都需要直流电源来工作。本文对整流桥的工作原理,结构特点,工艺流程,选型参数及设计注意事项进行总结。 阅读详情

相关推荐

2024银行科技岗笔试通关秘籍:从资料准备到实战技巧

本文系统解析了2024年银行科技岗笔试的考察内容与备考策略。文章指出,笔试是一场涵盖通用能力测试、计算机专业基础、金融科技知识和英语性格测试的复合型考试,并重点提供了数据结构与算法、计算机网络、数据库等高频考点的深度解析与实战突破技巧,帮助考生高效准备,顺利通关。

weixin_29243279的博客 121

ListView 如何提高其效率

1、ListView 如何提高其效率? **当 convertView 为空时,用 setTag()方法为每个 View 绑定一个存放控件的 ViewHolder 对象 convertView不为空, 重复利用已经创建的view的时候, 使用getTag()方法获取绑定的ViewH 对象,这样就避免了findViewById对控件的层层查询,而是快速定位到控件。** ① 复用ConvertV

2605

告别轮询!手把手教你用S32K3的FlexCAN Enhanced FIFO+DMA实现高效CAN FD数据接收

本文详细介绍了如何利用S32K3芯片的FlexCAN Enhanced FIFO与DMA组合方案,实现高效CAN FD数据接收,彻底告别传统轮询和中断模式。通过深度缓冲、智能过滤和DMA联动技术,该方案在5Mbps高负载场景下将CPU占用率从42%降至3%以下,显著提升系统实时性和吞吐量。

weixin_30906185的博客 502

提升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

手机拍照也能玩高光谱?教你用TensorFlow Lite在Android上实现实时RGB转高光谱

本文介绍了如何利用TensorFlow Lite在Android设备上实现实时RGB到高光谱的图像重构技术。通过深度学习模型优化和移动端部署策略,使智能手机具备专业级光谱分析能力,适用于农业检测、化妆品分析等多个领域。

weixin_29091105的博客 245

银河麒麟服务器操作系统V10SP3 U盘安装中“基础软件仓库错误”的排查与修复指南

本文针对在无网络环境下使用U盘安装银河麒麟服务器操作系统V10SP3时,遇到的“基础软件仓库错误”问题,提供了详细的排查与修复指南。核心解决方案是通过进入救援模式,使用lsblk命令确定U盘实际设备路径,并在系统引导时手动添加inst.repo内核参数来指定安装源,从而绕过安装程序的自动探测故障,确保安装流程顺利进行。

ik67890123的博客 1193

如何提升ListView的效率

ListView的优化方案  首先,默认直接使用ListView的效率是非常低的,在Adapter的getView()方法中,每次都将布局加载了一遍,当它快速滚动的时候就会性能下降。   1,在getView()的参数中还有一个View 类型的convertView参数,它用于将之前加载好的布局进行缓存,以便之后的重用。我们可以先判断converView是否为空,如果为空,则使用LayoutI...

Chen_dSir的博客 757

NXP应用随记(八):S32K3XX的HSE学习记录(HSE\MU\UTEST\IVT\A,B SWAP)

HSE,即硬件安全引擎(Hardware Security Engine),是NXP S32K312微控制器(MCU)中的一个功能,它提供了一系列的安全特性,包括加密、安全启动和密钥存储等。这些功能旨在增强汽车电子系统的信息安全,符合ISO26262标准,达到ASIL D安全等级。具体来说,S32K312的HSE支持AES-128/192/256加密、RSA、ECC等加密算法,以及侧通道保护,确保了数据传输和存储的安全性。

梦想技术家 9743

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

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

你的同学仔鸡肠 720

论文阅读|《强化学习在加工时间可变的机器人流水车间调度中的应用》

《Reinforcement Learning for robotic flow shop scheduling with processing time variations》 International Journal of Production Research/2021 1 摘要 我们解决了一个机器人流水车间调度问题,其中两种零件类型在每组给定的专用机器上进行处理。单个机器人在固定轨道上移动,一次运输一个部件,在给定的时间间隔内,这些部件在机器上的加工时间各不相同。我们使用强化...

太剧烈的快乐与太剧烈的悲哀是有相同之点的——同样地需要远离人群! 2930

几款开源的自动驾驶仿真平台项目

它被开发为一个虚幻的插件,可以简单地放到任何你想要的虚幻环境中。第一类是基于合成的数据,对环境、感知及车辆进行模拟,这里的感知大多数是图像层面的感知,这类模拟器主要用于感知、规划算法的初步开发上,Carla、AirSim、Udacity self-driving car simulator就属于这类;第二类是基于真实数据的回放,这里的真实数据包括图像、lidar、radar等各种传感器的数据,这类模拟器主要用于测试无人驾驶中信息融合算法以及车辆不同部件的性能,Apollo和Autoware就属于这类。

南七小僧的学海无涯 2849

Android之提升ListView的运行效率

提升运行效率

i_nclude的博客 668

程序员应用AI大模型创业实现财务自由的100种赚钱方案原理与实战指南

成功的 AI 创业者都遵循着 “技术 + 需求 + 变现” 的铁三角法则。记住:不是要做 “全能大模型”,而是成为某个垂直领域的 “AI 解决方案专家”。现在就开始行动:用周末 2 小时完成第一个 MVP,下周启动种子用户测试,三个月内找到可复制的盈利模式。当你实现第一个 10 万用户时,会发现财务自由的密码藏在持续迭代的每个 0.1 版本更新中。延伸思考:你的技术背景适合切入哪个细分领域?

AI天才研究院 1378

Android:提升ListView的运行效率

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

BAOLIANG196的博客 704

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

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

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

思跡的博客 473

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

34.提升ListView的运行效率 (ViewHolder模式)

ViewHolder 类用于缓存视图组件的引用。<ImageView<TextView接下来,我们创建自定义适配器,并实现 ViewHolder 模式。先来看一下ViewHolder是怎么用的:在ListView中,每个列表项的视图都是通过getView方法创建或重用的。默认情况下,每次getView方法被调用时,都会调用来获取视图组件。这会产生较大的性能开销,特别是在列表项很多的时候。ViewHolder 模式通过创建一个静态内部类,来缓存视图组件的引用。

2303_79132118的博客 375

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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_30708329的博客 101

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_30360497的博客 78

提升ListView的运行效率和ListView的其他属性

ListView优化 缓冲区:把划出屏幕的放到缓冲区去,放到屏幕最下,类似圆。 converview是划出屏幕的view divider 分隔线 可以设置颜色 dividerHeight可以设置分隔线的高度 focusable

二锅头爱拉菲 508

优化ListView提升运行效率

优化 public View getView(int position, View convertView, ViewGroup parent) { //LauoutInflater ViewHolder vh = null; Student student = mData.get(position); if (convertView

TaoLee 902

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

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

poiuyppp的博客 183
上一篇: 定制ListView的界面(使用自定义的列表项布局,一边显示水果图片,一边显示水果文字)以及ListView的点击事件
下一篇: RecyclerView控件的基本使用(增强版的ListView)
Android_牧
博客等级 码龄9年 88粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值