ListView 与Adapter

ET篇:Google.Protobuf的学习(理解基本的使用流程) 据我目前所知,ET使用的数据交换协议是Google.Protobuf,所以今天就来学习一下,但是网上许多人都是以高下立判的方式讲解的,对新手小白很不友好,所以我今天就以纯小白的视角和大家一起学习 学习环境: .NET Core2.2 .NET Framework 4.7.2 Rider protobuf-csharp-3.7.0-rc-2 Google.Protobuf简介 prot... 阅读详情



ListView是Android开发过程中较为常见的组件之一,它将数据以列表的形式展现出来。一般而言,一个ListView由以下三个元素组 成:

1.View,用于展示列表,通常是一个xml所指定的。大家都知道Android的界面基本上是由xml文件负责完成的,所以ListView的界 面也理所应当的使用了xml定义。例如在ListView中经常用到的“android.R.layout.simple_list_item_1”等, 就是Android系统内部定义好的一个xml文件。

2.适配器,用来将不同的数据映射到View上。不同的数据对应不同的适配器,如ArrayAdapter,CursorAdapter, SimpleAdapter等, 他们能够将数组,指针指向的数据,Map等数据映射到View上。也正是由于适配器的存在,使得ListView的使用相当灵活,经过适配器的处理后,在 view看来所有的数据映射过来都是一样的。3.数据,具体的别映射的数据和资源,可以是字符串,图片等,通过适配器,这些数据将会被现实到 ListView上。所有的数据和资源要显示到ListView上都通过适配器来完成。

系统已有的适配器可以将基本的数据显示到ListView上,如:数组,Cursor指向的数据,Map里的数据。但是在实际开发中这些系统已实现 的适配器,有时不能满足我们的需求。而且系统自带的含有多选功能ListView在实际使用过程中会有一些问题。要实现复杂的ListView可以通过继 承ListView并重写相应的方法完成,同时也可以通过继承BaseAdapter来实现。通过文档可以看出,ArrayAdapter,CursorAdapter, SimpleAdapter都继承于BaseAdapter。所以通过继承BaseAdapter就可以完成自己的Adapter,可以将任何复杂组合的数据和资源,以任何你想要的显示效果展示给大家。

继承BaseAdapter之后,需要重写以下四个方法:getCount,getItem,getItemId,getView。

ListView绘制的过程如下:首先,系统在绘制ListView之前,将会先调用getCount方法来获取Item的个数。之后每绘制一个 Item就会调用一次getView方法,在此方法内就可以引用事先定义好的xml来确定显示的效果并返回一个View对象作为一个Item显示出来。也 正是在这个过程中完成了适配器的主要转换功能,把数据和资源以开发者想要的效果显示出来。也正是getView的重复调用,使得ListView的使用更 为简单和灵活。这两个方法是自定ListView显示效果中最为重要的,同时只要重写好了就两个方法,ListView就能完全按开发者的要求显示。而 getItem和getItemId方法将会在调用ListView的响应方法的时候被调用到。所以要保证ListView的各个方法有效的话,这两个方 法也得重写。比如:没有完成getItemId方法的功能实现的话,当调用ListView的getItemIdAtPosition方法时将会得不到想 要的结果,因为该方法就是调用了对应的适配器的getItemId方法。


 

另外,对于setTag方法是干什么的,SDK解释为

Tags

Unlike IDs, tags are not used to identify views. Tags are essentially an extra piece of information that can be associated with a view. They are most often used as a convenience to store data related to views in the views themselves rather than by putting them in a separate structure.

Tag不像ID是用标示view的。Tag从本质上来讲是就是相关联的view的额外的信息。它们经常用来存储一些view的数据,这样做非常方便而不用存入另外的单独结构。

convertView中的TAG

1.  对于使用了LayoutInflater对象进行View扩充的Tag的使用

public View getView(int position, View convertView, ViewGroup parent) {

 

       ViewHolder holder = null;

       if (convertView == null) {

 

          holder = new ViewHolder();

 

          convertView = inflater.inflate(R.layout.vlist2, null);

          holder.img = (ImageView) convertView.findViewById(R.id.img);

          holder.title = (TextView) convertView.findViewById(R.id.title);

           holder.info = (TextView)

convertView.findViewById(R.id.info);

          // setTag的妙用

          convertView.setTag(holder);

 

       } else {

          // setTag的妙用

          holder = (ViewHolder) convertView.getTag();

       }

 

 ……略

}


首先我们要知道setTag方法是干什么的,他是给View对象的一个标签,标签可以是任何内容,我们这里把他设置成了一个对象,因为我们是把vlist2.xml的元素抽象出来成为一个类ViewHolder,用了setTag,这个标签就是ViewHolder实例化后对象的一个属性。我们之后对于ViewHolder实例化的对象holder的操作,都会因为java的引用机制而一直存活并改变convertView的内容,而不是每次都是去new一个。我们就这样达到的重用——我希望我说清楚了。如果有更简单的解释,请指教。

这是我们在Adapter中的使用,那么我们在这里不使用Tag标签会怎么样呢?

我们试想,如果我们不用Tag标签,那么我们的对象如何与convertView缓存结合并达到合理的效率利用?貌似答案并不明朗——所以使用Tag是比较明智的做法。

 

2.  对于没有使用LayoutInflater对象进行View扩充的Tag的使用。

if (convertView != null) {

  view = convertView;

  ...

  } else {

  view = new Xxx(...);

  ...

  }

这是我们的程序,我们看到,貌似没有用Tag——是的,当没有使用LayoutInflater进行View的扩充的时候,是没有必要用的,虽然也可以用。




华为OD机试双机位C卷-水库溃坝填补(Py/Java/C/C++/Js/Go) 华为OD机试(机考)双机位C卷 【水库溃坝填补】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。水库溃坝填补。 阅读详情

相关推荐

傻瓜式下载、安装CentOS7操作步骤

CentOS7.9下载和安装操作步骤

weixin_45608163的博客 1万+

Android ListView理解之BaseAdapter

ListView是Android开发过程中较为常见的组件之一,它将数据以列表的形式展现出来。一般而言,一个ListView由以下三个元素组 成: 1.View,用于展示列表,通常是一个xml所指定的。大家都知道Android的界面基本上是由xml文件负责完成的,所以ListView的界 面也理所应当的使用了xml定义。例如在ListView中经常用到的“android.R.layout.simp

始则转俗成真,终乃回真向俗! 1982

pytorch实现手语识别

连续手语识别项目,中文数据集CSL

masteryi-0018的博客 1万+

Android 中ArrayAdapter,SimpleAdapter,BaseAdapter三种适配器的使用

ListView中使用ArrayAdapter,SimpleAdapter,BaseAdapter这三种适配器

qq_23939265的博客 2217

三种 绘制奈奎斯特曲线 的方法

如何绘制Nyquist曲线 提供三种绘制方法,其中使用最广泛的是概略图绘制方法 ①解析法绘制 ②概略图法绘制 ③MATLAB绘制

weixin_46664967的博客 6万+

保姆级避坑指南:在Ubuntu 18.04上搞定速腾Helios雷达驱动与fast-LIO2的完整配置流程

本文提供了一份详细的速腾Helios雷达与fast-LIO2在Ubuntu 18.04上的配置避坑指南,涵盖驱动安装、数据格式转换到建图全流程。特别针对常见编译错误和数据转换问题提供了解决方案,帮助开发者高效完成环境搭建与建图任务。

weixin_27252001的博客 113

android应用开发全程实录-你有多熟悉listview? getView重写 inflate使用

今天给大家带来《android应用开发全程实录》中关于listview和adatper中的部分。包括listview的基本使用,listview的优化等。 我们经常会在应用程序中使用列表的形式来展现一些内容,所以学好ListView是非常必需的。ListView也是Android中比较难以使用的控件,这节内容就将详细解读ListView的用法。 一个ListView通常有两个职责。 (1)将

lizhenmingdirk的专栏 8110

风控系统中的架构设计原型图分析与实践探讨

本文探讨了风控系统的架构设计原型图在风险管理中的重要性。通过分析多个案例,文章展示了如何利用架构设计原型图提升团队沟通效率,优化系统结构与功能。强调了良好的架构设计不仅有助于系统的可扩展性和可维护性,还能增强对风险的应对能力。最后,呼吁金融行业持续关注技术进步与市场需求变化,以不断提升风控系统的设计与实施效果。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 6万+

Android ListView控件

1. ListView类 ListView的主要属性 stackFromBottom,设置为true时,内容将从底部开始显示 cacheColorHint,设置为#00000000透明时,可以避免拖动时背景显示黑色的问题 divider,设置分割线,#00000000或@null分割线被隐藏 fadingEdge,设置为none,去除上边和下边的阴影 scrollbars,设置为none,隐...

假装你是大灰狼的专栏 634

大模型性能压测全指南:从指标到实战

本文系统阐述大模型(LLM/多模态)私有化部署性能压测方案,涵盖核心指标(TTFT、TPOT、吞吐、并发、资源占用、错误率)、四类典型压测场景及工具选型(Locust、vLLM benchmark等)。强调环境隔离、参数固定与长尾延迟分析,提出瓶颈定位思路与标准化报告模板,结合伪代码示例实现流式接口精准打点,确保测试结果真实可信,助力优化模型服务稳定性与性能。

SmallBull的博客 55

机器翻译的评价标准:BLEU、ROUGE等指标说明及代码实现

机器翻译领域常用的自动评价指标主要包括BLEU、ROUGE、METEOR和COMET四大类。BLEU基于n-gram精确率和短句惩罚,ROUGE关注召回率,METEOR结合精确率和召回率并考虑同义词,COMET则利用预训练模型计算语义相似度。这些指标各有特点:BLEU适用于机器翻译,ROUGE对长句友好,METEOR更接近人工评分,COMET无需参考译文。代码实现上,sacrebleu、rouge-score等库提供了便捷的计算方式。新兴趋势包括基于BERT等模型的语义评估和大语言模型评估器,但传统指标仍占

数据知道的博客 9417

Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法与有用代码片段

收藏ArrayAdapter、SimpleAdapter和BaseAdapter的一些简短代码片段,希望用时方便想起其用法。 1.ArrayAdapter 只可以简单的显示一行文本 代码片段: ArrayAdapter adapter = new ArrayAdapter( this, R.layout.item,

开心阳 3万+

MTEX包在Matlab中实现从EBSD数据生成Abaqus网格与晶粒取向:一种对用户材料旋转矩阵分量实践的全面指南

此教程提供了一种使用MTEX Matlab包处理EBSD数据的方法,并生成Abaqus输入文件,这对于进行多晶体有限元分析具有极大的帮助。但值得注意的是,这只是一个基本的例子,实际应用中可能需要根据您的实际需求进行调整。MTEX包还提供了许多其他的功能,可以进行更复杂的分析和处理,我非常推荐您去探索。希望这篇文章能对您有所帮助,如果您有任何疑问或建议,欢迎留言交流。在接下来的文章中,我将会介绍更多关于MTEX的高级功能,敬请期待。– (完)–

qq_38334677的博客 4437

ListView的Adapter

实现的adapter的优化 public class FruitAdapter extends ArrayAdapter { //默认的构造方法 public FruitAdapter(@NonNull Context context, int resource, @NonNull Object[] objects) { super(context, resource, objects); } @NonNull @Override /* p

qq_45902401的博客 680

蓝牙模块HM-10手册

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

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

ListView,adapter使用总结

学习android也有一段时间了,老是想要通过总结的形式形成文档保存起来,但是一直都没能实现起来,一是本人挺懒的,有严重的拖延症,而是确实没什么时间来弄,每天回到宿舍已经是九点多了,宿舍人多,洗个澡,洗一下衣服,已经是十一点多了,不想明天的状态又是顶着两个黑眼圈来学习。所以,唉,还是自己的问题! 写总结,我越来越觉的很有必要,俗话说好记性不如烂笔头,你记性再好都会忘光光的,所以记录总结是最好的方式了

Jason_nTom的专栏 2891

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Android之ListView的Adapter的复用

Android之ListView的Adapter的复用

不能说的秘密的博客 5297

VB摄像头监控

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

ListView与Adapter

ListView在Android中是专门用于显示列表的,是要是View的子类,都可以在ListView中显示出来,它以垂直列表的形式显示所有列表项。每一个条目都是一View对象      ListView生成列表视图有两种方式:          (1)直接使用ListView进行创建            (2)让Activity继承ListActivity(相当于该Activity显示的

枫狂DREN的博客 411

ListView控件和Adapter

文章目录1.ListView组件的作用2.Adapter的作用2.1 android adapter的类图3.adapter的使用3.1 ArrayAdapter(数组适配器)案例3.2 SimpleAdapter的使用案例 1.ListView组件的作用 ListView组件在android系统中的使用非常常见,通常用来帮助我们展示一些密集的数据,列表之类的,例如下图: 2.Adapter的作用 我们不能将数据直接放到ListView上展示出来,我们需要通过adapter在ListView之间做数据桥梁

qq_42418169的博客 1663

Android listview与adapter用法

Android listview与adapter用法 一个ListView通常有两个职责。 (1)将数据填充到布局。 (2)处理用户的选择点击等操作。 第一点很好理解,ListView就是实现这个功能的。第二点也不难做到,在后面的学习中读者会发现,这非常简单。 一个ListView的创建需要3个元素。 (1)ListView中的每一列的View。

vane918的博客 1212

ListView和Adapter

一、ListView与Adapter的关系   ListView是Android开发过程中较为常见的组件之一,它将数据以列表的形式展现出来。一般而言,一个ListView由以下三个元素组成:        1、View,用于展示列表,通常是一个xml所指定的。大家都知道Android的界面基本上是由xml文件负责完成的,所以ListView的界面也理所应当的使用了xml定义。例如在L

u012435852的博客 394

Adapter与ListView的合作

如果要在ListView中展示一系列的item列表(都是相同的布局), 除了在资源文件中添加之外, 还可以用Adapter, 将数据放到ListView上展示出来. 那么, 我们就来介绍一下, Adapter和ListView是如何一起工作的.

Super1Apple的博客 436

ListView和Adapter的配合使用以及Adapter的重写

ListView和Adapter的使用 首先介绍一下ListView是Android开发过程中较为常见的组件之一,它将数据以列表的形式展现出来。一般而言,一个ListView由以下三个元素组成: 1、View,用于展示列表,通常是一个xml所指定的。大家都知道Android的界面基本上是由xml文件负责完成的,所以ListView的界面也理所应当的使用了x...

dieji5512的博客 316

ListView和Adapter的学习

ListView是Android 中用以显示数据的列表控件.对于ListView的数据显示,离不开适配器 Adapter. 它起到的作用就是桥接数据源和显示控件,这个工作在ListView.setAdapter()函数中完成.对于ListView来说,数据是按条显示的,每个条称为一个Item , 我们可以定制Item 的样式,然后也是在适配器中完成与ListView 的连接。 对于Ad

心之忧矣 不歌何为 432

ListView—Adapter的使用

ListView—Adapter的使用

彩色的影子的博客 2196

ListView与Adapter使用要点

项目用到ListView,由于要用到 ImageView ,图片源不是在资源里面的,没法使用资源 ID,因此无法直接使用SimpleAdapter,要自己写一个Adapter。 在使用ListView和Adapter需要注意以下几点:   1. Adapter.getView()   public View getView(int position, View conv...

Haking的博客 438

Kotlin ListView设置Adapter

直接上代码。 1.附上Activity代码 package com.example.chehang168.kotlindemo import android.view.View import android.widget.AdapterView import com.example.chehang168.kotlindemo.adapter.ListViewAdapter //这里注入可...

li276524118的博客 4328
上一篇: SQLite Datetime 类型的插入与读出
下一篇: 通用适配器
慕广陵
博客等级 码龄17年 3粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值