浅谈ListView中组件的复用

2024-06-11 01:58
文章标签 浅谈 listview 复用 组件

本文主要是介绍浅谈ListView中组件的复用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  做Android开发已经有两个月了,在学习的过程中也遇到了一些问题,特别是在使用ListView时,现在写一些自己的心得希望能够帮助到大家。

使用ListView最大的作用可能就是为了复用组件节约资源,但是组件的复用却是让人又爱又恨。对于控件的复用我们首先先看一个例子。

package com.example.testlistview;import java.util.List;import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;/*** ** @author 孔令辉* @date 2013-10-29**/
public class MyAdapter extends ArrayAdapter<String>{private Context context;public MyAdapter(Context context, int resource, List<String> objects) {super(context, resource, objects);this.context = context;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {convertView = new TextView(context);((TextView)convertView).setText(position + "");return convertView;}
}

在刚使用Adapter时使用上述代码,但随着对Android了解的逐步加深,最终认识到上述代码完全没有使用到ListView对组件复用的特性,这是对性能极大的浪费。因为每次getView时都new新的TextView,完全没有理会convertView。改进代码如下:
package com.example.testlistview;import java.util.List;import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;/*** ** @author 孔令辉* @date 2013-10-29**/
public class MyAdapter extends ArrayAdapter<String>{private Context context;public MyAdapter(Context context, int resource, List<String> objects) {super(context, resource, objects);this.context = context;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {if(convertView == null){convertView = new TextView(context);((TextView)convertView).setText(position + "");}return convertView;}
}

此时,当组件不存在是才会创建组件,可能此时只有代码还不形象,那我就上图吧。



图一(未复用) 注:一屏有24个控件



图二(复用) 注:一屏有24个控件(请注意后面几个控件)

各位读者已看到其中区别了吧,今天就先写到这里,这是我的第一篇博客希望对你有所帮助,并感谢阅读。有问题可联系本人。文章最终附上Activity的代码。

package com.example.testlistview;import java.util.LinkedList;
import java.util.List;import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;/*** ** @author 孔令辉* @date 2013-10-29**/
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);List<String> strs = new LinkedList<String>();for (int i = 0; i < 30; i++) {strs.add(i + "");}MyAdapter myAdapter = new MyAdapter(this, 0, strs);ListView listView = new ListView(this);listView.setAdapter(myAdapter);this.setContentView(listView);}}


这篇关于浅谈ListView中组件的复用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1049893

相关文章

公共筛选组件(二次封装antd)支持代码提示

如果项目是基于antd组件库为基础搭建,可使用此公共筛选组件 使用到的库 npm i antdnpm i lodash-esnpm i @types/lodash-es -D /components/CommonSearch index.tsx import React from 'react';import { Button, Card, Form } from 'antd'

React+TS前台项目实战(十七)-- 全局常用组件Dropdown封装

文章目录 前言Dropdown组件1. 功能分析2. 代码+详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局Dropdown组件封装,可根据UI设计师要求自定义修改。 Dropdown组件 1. 功能分析 (1)通过position属性,可以控制下拉选项的位置 (2)通过传入width属性, 可以自定义下拉选项的宽度 (3)通过传入classN

【杂记-浅谈DHCP动态主机配置协议】

DHCP动态主机配置协议 一、DHCP概述1、定义2、作用3、报文类型 二、DHCP的工作原理三、DHCP服务器的配置和管理 一、DHCP概述 1、定义 DHCP,Dynamic Host Configuration Protocol,动态主机配置协议,是一种网络协议,主要用于在IP网络中自动分配和管理IP地址以及其他网络配置参数。 2、作用 DHCP允许计算机和其他设备通

QT 中ListView和ListWidget有什么区别

ListView和ListWidget在Qt框架中都是用于显示列表数据的控件,但它们在使用方法和特性上存在一些明显的差异。以下是关于它们用法不一样的地方的详细分析: 数据管理方式: ListView:使用QAbstractItemModel数据模型来管理和显示列表数据。QAbstractItemModel是一个抽象类,允许开发者自定义数据模型以适应特定的数据结构和需求。这使得ListView在处

浅谈 MySQL for excel

欢迎关注微信公众号“Python生态智联”  MySQL for excel是一个大小只有几兆的MySQL附件,它能让我们在Microsoft excel中处理MySQL数据。小编用了两天时间浏览了MySQL for excel的使用指南并按demo演示了一遍(手册地址https://dev.mysql.com/doc/mysql-for-excel/en/),现从功能和局限两方面对MySQL

Transformers和Langchain中几个组件的区别

1.对于Transformers框架的介绍 1.1 介绍: transformers 是由 Hugging Face 开发的一个开源库,它提供了大量预训练模型,主要用于自然语言处理(NLP)任务。这个库提供的模型可以用于文本分类、信息抽取、问答、文本生成等多种任务。 1.2 应用场景: 文本分类:使用 BERT、RoBERTa 等模型进行情感分析、意图识别等。命名实体识别(NER):使用序列

怎么优化ArcEngine组件开发mfc程序界面?

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 问题描述   这种VS2015 + ArcEngine10.2开发的mfc小程序怎么优化界面,使系统看上去更美观 如上问题有来自我自身项目开发,有的收集网站

Flutter ListView详解

文章示例代码 ListView常用构造 ListView 我们可以直接使用ListView 它的实现也是直接返回最简单的列表结构,粗糙没有修饰。 ListView 默认构建 效果 ///默认构建 Widget listViewDefault(List list) { List _list = new List(); for (int i = 0; i < list.length;

Vue3的Teleport:Teleport是Vue3的一个新功能,它允许我们将子组件渲染到父组件以外的地方,这在处理模态框、弹出窗口等情况时非常有用

I. Teleport 的概述 Teleport 的定义:   在 Vue 3.0 中,Teleport 是一个新的内置组件,它允许我们将任何部分的渲染内容 Teleport(传送)到 Vue 应用范围之外的地方。 换句话说,你可以控制片段,让它们在 DOM 中的任何位置渲染,而不仅仅是在当前组件内部。   Teleport 的效用和应用场景:   Teleport 的主要用途是处理在 UI

Viewpager+Fragment滑动更改ListView数据和设置title文字的变化

设置ListView的数据更改只有几行代码,不用说了; 设置title的文字的变化:给ViewPager设置监听器,Viewpager变化的时候,给文字添加渐变,滑动完成后设置文字最终的大小 主要代码如下: /** * ViewPager切换监听方法 */public ViewPager.OnPageChangeListener pageListener = new ViewP