我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android ListView列表怎么优化

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android ListView列表怎么优化

这篇文章主要讲解了“Android ListView列表怎么优化”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android ListView列表怎么优化”吧!

优化点1:使用 builder构建列表

当你的列表元素是动态增长的时候(比如上拉加载更多),请不要直接用children 的方式,一直往children 的数组增加组件,那样会很糟糕。

//糟糕的用法ListView(  children: [    item1,    item2,    item3,    ...  ],)//正确的用法ListView.builder(  itemBuilder: (context, index) => ListItem(),  itemCount: itemCount,)

对于 ListView.builder 是按需构建列表元素,也就是只有那些可见的元素才会调用itemBuilder 构建元素,这样对于大列表而言性能开销自然会小很多。

Creates a scrollable, linear array of widgets that are created on demand. This constructor is appropriate for list views with a large (or infinite) number of children because the builder is called only for those children that are actually visible.

优化点2:禁用 addAutomaticKeepAlives 和 addRepaintBoundaries 特性

这两个属性都是为了优化滚动过程中的用户体验的。addAutomaticKeepAlives 特性默认是 true,意思是在列表元素不可见后可以保持元素的状态,从而在再次出现在屏幕的时候能够快速构建。这其实是一个拿空间换时间的方法,会造成一定程度的内存开销。可以设置为 false 关闭这一特性。缺点是滑动过快的时候可能会出现短暂的白屏(实际会很少发生)。

addRepaintBoundaries 是将列表元素使用一个重绘边界(Repaint Boundary)包裹,从而使得滚动的时候可以避免重绘。而如果列表很容易绘制(列表元素布局比较简单的情况下)的时候,可以关闭这个特性来提高滚动的流畅度。

addAutomaticKeepAlives: false,addRepaintBoundaries: false,

优化点3:尽可能将列表元素中不变的组件使用 const 修饰

使用 const 相当于将元素缓存起来实现共用,若列表元素某些部分一直保持不变,那么可以使用 const 修饰。

return Padding(  child: Row(    children: [      const ListImage(),      const SizedBox(        width: 5.0,      ),      Text('第$index 个元素'),    ],  ),  padding: EdgeInsets.all(10.0),);

优化点4:使用 itemExtent 确定列表元素滚动方向的尺寸

对于很多列表,我们在滚动方向上的尺寸是提前可以根据 UI设计稿知道的,如果能够知道的话,那么使用 itemExtent 属性制定列表元素在滚动方向的尺寸,可以提升性能。这是因为,如果不指定的话,在滚动过程中,会需要推算每个元素在滚动方向的尺寸从而消耗计算资源。

itemExtent: 120,

优化实例

下面是一开始未改造的列表,嗯,可以认为是垃圾代码

class LargeListView extends StatefulWidget {  const LargeListView({Key? key}) : super(key: key);  @override  _LargeListViewState createState() => _LargeListViewState();}class _LargeListViewState extends State<LargeListView> {  @override  Widget build(BuildContext context) {    return Scaffold(      appBar: AppBar(        title: Text('大列表'),        brightness: Brightness.dark,      ),      body: ListView(        children: List.generate(          1000,          (index) => Padding(            padding: EdgeInsets.all(10.0),            child: Row(              children: [                Image.network(                  'https://file.lsjlt.com/upload/202306/28/uogn1xvfgp3.jpg',                  width: 200,                ),                const SizedBox(                  width: 5.0,                ),                Text('第$index 个元素'),              ],            ),          ),        ),      ),    );  }}

当然,实际不会是用 List.generate 来生成列表元素,但是也不要用一个 List<Widget> 列表对象一直往里面加列表元素,然后把这个列表作为 ListView 的 children!改造后的代码如下所示,因为将列表元素拆分得更细,代码量是多一些,但是性能上会好很多。

import 'package:flutter/material.dart';class LargeListView extends StatefulWidget {  const LargeListView({Key? key}) : super(key: key);  @override  _LargeListViewState createState() => _LargeListViewState();}class _LargeListViewState extends State<LargeListView> {  @override  Widget build(BuildContext context) {    return Scaffold(      appBar: AppBar(        title: Text('大列表'),        brightness: Brightness.dark,      ),      body: ListView.builder(        itemBuilder: (context, index) => ListItem(          index: index,        ),        itemCount: 1000,        addAutomaticKeepAlives: false,        addRepaintBoundaries: false,        itemExtent: 120.0,      ),    );  }}class ListItem extends StatelessWidget {  final int index;  ListItem({Key? key, required this.index}) : super(key: key);  @override  Widget build(BuildContext context) {    return Padding(      child: Row(        children: [          const ListImage(),          const SizedBox(            width: 5.0,          ),          Text('第$index 个元素'),        ],      ),      padding: EdgeInsets.all(10.0),    );  }}class ListImage extends StatelessWidget {  const ListImage({Key? key}) : super(key: key);  @override  Widget build(BuildContext context) {    return Image.network(      'https://file.lsjlt.com/upload/202306/28/uogn1xvfgp3.jpg',      width: 200,    );  }}

感谢各位的阅读,以上就是“Android ListView列表怎么优化”的内容了,经过本文的学习后,相信大家对Android ListView列表怎么优化这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android ListView列表怎么优化

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android ListView列表怎么优化

这篇文章主要讲解了“Android ListView列表怎么优化”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android ListView列表怎么优化”吧!优化点1:使用 builder
2023-06-30

Android ListView列表优化的方法详解

1. 使用ViewHolder模式:该模式可以减少findViewById的调用次数。在getView()方法中,通过ViewHolder类来保存已经找到的View,避免多次调用findViewById来查找同一个View。2. 使用分页加
2023-08-14

Android ListView列表优化的方法有哪些

优化Android ListView列表的方法有以下几种:1. 使用ViewHolder模式:在getView()方法中使用ViewHolder模式,将每个Item的View缓存起来,避免重复的findViewById()操作,提高性能。2
2023-08-14

如何优化Android中的ListView

如何优化Android中的ListView?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。ListView的优化对于ListView来说,应该算是布局中几种最常用的组件之一了,使
2023-05-31

android二级listview列表实现代码

今天来实现以下大众点评客户端的横向listview二级列表,先看一下样式。 这种横向的listview二级列表在手机软件上还不太常见,但是使用过平板的都应该知道,在平板上市比较常见的。可能是因为平板屏幕比较大,而且也能展现更多的内容。 下
2022-06-06

Android ListView实现简单列表功能

ListView如何实现简单列表,供大家参考,具体内容如下效果图:啥也没干的ListView张这样:fry.Activity01package fry;import com.example.ListView.R;import android
2023-05-30

Android组件ListView列表简单使用

ListView是一种非常常见的一个组件,以垂直列表的形式显示列表项。而完成一个简单的ListView只需要这么三个步骤:1、在布局文件XML中添加ListView并配置相应的属性 2、在资源文件XML中添加列表项 3、将布局文件应用上举例
2022-06-06

Android ListView优化之提高android应用效率

ListView是一个经常用到的控件,ListView里面的每个子项Item可以使一个字符串,也可以是一个组合控件。Adapter是listview和数据源间的中间人。当每条数据进入可见区域时,adapter的getview()会被调用,返
2022-06-06

Android之ListView优化技巧有哪些

以下是一些优化Android中ListView的技巧:1. 使用ViewHolder模式:在getView()方法中使用ViewHolder模式来缓存View,避免重复调用findViewById()方法。2. 使用Recycler机制:通
2023-09-25

QT怎么制作一个ListView列表

这篇文章主要介绍“QT怎么制作一个ListView列表”,在日常操作中,相信很多人在QT怎么制作一个ListView列表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”QT怎么制作一个ListView列表”的疑
2023-07-05

Android中ListView Item布局优化技巧

本文实例讲述了Android中ListView Item布局优化技巧。分享给大家供大家参考,具体如下: 之前一直都不知道ListView有多种布局的优化方法,只能通过隐藏来实现,自己也知道效率肯定是很低的,但是也不知道有什么方法,这些天又查
2022-06-06

怎么清空listview更新列表内容

要清空一个ListView并更新列表内容,你可以按照以下步骤操作:1. 获取ListView的数据源,比如一个ArrayList。2. 清空数据源,可以使用`clear()`方法。3. 通知ListView数据源已经改变,需要更新列表内容。
2023-09-14

Vue怎么优化无限滚动列表

这篇文章主要介绍“Vue怎么优化无限滚动列表”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue怎么优化无限滚动列表”文章能帮助大家解决问题。问题大家都知道,Web 页面修改 DOM 是开销较大的操
2023-07-04

Android ListView常见的优化方式详解

ListView的优化 对于ListView来说,应该算是布局中几种最常用的组件之一了,使用也十分方便,下面个大家介绍一下两种常见的优化方式. 1.条目复用优化其实listview的工作原理就是,listview在请求屏幕可见的item数时
2022-06-06

Android listview动态加载列表项实现代码

最近了一个动态加载listview类表项的列子,分享出来大家学习学习,说说这个例子的实现过程,首先限定每次加载的列表项数据为10条数据,当拖动listview滚动到最后一条数据的时候再加载10条,并在Listview下方显示加载提示。 下面
2022-06-06

Android性能优化系列篇UI优化

这篇文章主要为大家介绍了Android性能优化系列篇UI优化示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

android listview优化几种写法详细介绍

这篇文章只是总结下getView里面优化视图的几种写法,就像孔乙己写茴香豆的茴字的几种写法一样,高手勿喷,勿笑,只是拿出来分享,有错误的地方欢迎大家指正,谢谢。 listview Aviewthatshowsitemsinavertical
2022-06-06

Android ListView适配器(Adapter)优化方法详解

Android ListView的优化,在做Android项目的时候,在用到ListView 界面及数据显示,这个时候如果资源过大,对项目来说,用户体验肯定是不好的,这里就对如何优化做了详细介绍: Adapter的作用就是ListView界
2022-06-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录