ListView以及自定义适配器

ListView自定义适配器Adapter的实现与优化 ListView是Android平台上最常用的列表组件之一,主要用于展示滚动列表信息。开发者可以通过它来快速创建滚动型列表界面。然而,为了将数据有效地展示在ListView中,就需要适配器(Adapter)的参与,因为适配器负责将数据模型映射到ListView的每一行视图。数据模型(Model)是MVVM(Model-View-ViewModel)架构中的核心组件之一,它代表了应用程序中的业务逻辑和数据结构。 阅读详情

   ListView

  ListView顾名思义就是列表视图,用于显示多行数据的视图,

                 ListView本身属于容器视图,它需要借助适配器(adapter)来显示内容

                      listView选项添加监听事件: setonItemClickListener()

                                      其中的方法 onItemClick<parent,View view, int position, long id>();

                                                   parent 是被点击数据项所属listView的对象

                                                   view是接受被选中的是被选中数据项的TextView对象

                                                  position接收的是在适配器/list集合/spinner中的位置


适配器  :是连接适配器控件(AdapterView)和数据源的桥梁,通过它能有效地实现数据与AdapterView的分离设置,使AdapterView与数据的绑定更加简便,修改更加方便。

1.适配器控件:包含多项相同格式资源的列表,每项只显示一次。常用的适配器控件有:GridIView,ListView,Spinner,Gallery;

2.适配器对象:给适配器控件提供数据。常用的适配器有:ArrayAdapter,SimpleAdapter,SimpleCursorAdapter和自定义Adapter;


 系统提供adapter的适配器:

              首先:     声明: ArrayAdapter<String> adapter=new ArrayAdapter<String>(context, resource, textViewResourceId);

                               第一个参数 context   :表示上下文,即调用此适配器的类的对象,XXX.this

                               第二个参数 resource :即用于显示每个ListView资源的布局xml文件,系统默认的即就是:android.R.layout.simple_list_item_1

                              第三个参数 textViewResourceId:需要传入集合对象,即适配器中存放的资源

                   

             然后:  listview.setAdapter(adapter);   将适配器添加到listView中(在spinner,autocompleteTextView中也是这样)

           

            最后:假如适配器里存放的内容需要更新

                                   则利用第三个参数的对象, 首先 list.clear() 清空,  其次list.add()向里面加值,最后调用adapter.notifyDataSetChanged();将更新内容存到容器中去



自定义适配器

            (1)新建一个类 ,让它继承BaseAdapter接口

            (2) 声明构造函数及需要传入的三个参数:1,。上下文    2,。此适配器的布局xml文件id    3,适配器中需要传入的值


          下面就用代码简单解释三种适配器(三种是越来越优化的 ,所以一般只用第三种)

public class Myadapter extends BaseAdapter {
    private Context context;
    private List<String> list;
    private int ResourceId;            
    public Myadapter(Context context,int ResourceId,List<String> list)//三个需要传入的参数
    {
        this.context=context;
        this.ResourceId=ResourceId;
        this.list=list;
    }
    @Override  //返回list集合中值的个数
    public int getCount() {
        int count=0;
        if(list!=null)
        {
            count=list.size();
        }
        return count;
    }
    @Override//返回集合中对应position的值
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return list.get(position);
    }
    @Override//返回list中元素的位置position
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }
    @Override
     public View getView(int position, View convertView, ViewGroup parent) {

         此方法对自定义适配器来说是最重要的,其中三个参数为:

         //参数接收的position是显示数据项在集合中的位置,根据位置获得item值

     //convertView来记录消失的布局对象,直接使用在新出现的布局中

    三种写法的步骤--》获取布局文件对象--》获取视图组件对象--》对视图组件进行赋值--》返回布局文件对象

        
        /*//适配器的第一种写法
        //<1>根据布局文件的xml生成布局对象 ,其中getLayoutInflater()方法在MainActivity
        //   中没有,所以需要向上转型成activity然后再调用
        LayoutInflater inflater=((Activity)context).getLayoutInflater();
        //获得xml布局对象,第一个参数为xml布局的id,第二个为parent,但必须置空
        View view=inflater.inflate(ResourceId, null);
        //获取适配器对应位置的list值
        String item=(String)list.get(position);
        //根据布局对象获取适配器对象
        TextView textView=(TextView) view.findViewById(R.id.textView);
        //将每个对应的值写到textView中去
        textView.setText(item);
        //返回xml布局对象,
        return view;
        */

        
        
        
        //适配器的第二种写法(优化了第一种写法):实现布局对象的复用
        //因为每在屏幕上显示一个listView就会,创建一个新的布局对象,为了节省内存空间
        //利用convertView来记录消失的布局对象,直接使用在新出现的布局中
        /*if(convertView==null)
        {
            //获得xml布局对象
            convertView=LayoutInflater.from(context).inflate(ResourceId, null);
            //第二种写法
            //convertView=LayoutInflater.from(context).inflate(ResourceId, parent,false);
        }
        //根据xml布局对象获得视图对象
        TextView textView=(TextView) convertView.findViewById(R.id.textView);
        //向视图中添加信息
        textView.setText(list.get(position).toString());
        return convertView;*/
        
        
        //适配器的第三种写法,(优化了第二种),实现了不用多次findViewByid这个操作,只是将它绑定
        //在covertView中一起同步使用,
        //<1>首先创建一个内部类 用于存放视图对象;
        //<2>其次获得xml布局对象
        ViewHolder holder;
        if(convertView==null)
        {  //与第二种一样
            convertView=LayoutInflater.from(context).inflate(ResourceId, null);
            holder=new ViewHolder();
            //将获得的视图对象保存成内部类的成员变量
            holder.textView=(TextView) convertView.findViewById(R.id.textView);
            //将此内部类作为converView的tag标签
            convertView.setTag(holder);
        }
        //去除convertView中的标签
        holder=(ViewHolder) convertView.getTag();
        //设置textView的内容
        holder.textView.setText(list.get(position).toString());
        return convertView;
    }

    class ViewHolder  //此内部类是专门为第三种方法减少获取组件findViewByid(R.id.textView)而建立的
    {
        TextView textView;
    }
}

          



     

5分钟搞定Unity+Visual Studio开发环境配置(含C#游戏开发工作负载) 本文提供了一份详细的Unity与Visual Studio开发环境配置指南,帮助开发者在5分钟内完成C#游戏开发工作负载的设置。从Unity Hub安装到Visual Studio关键组件选择,再到常见问题排查,全面覆盖环境搭建的各个环节,显著提升游戏开发效率。 阅读详情

相关推荐

从solidworks导出URDF模型

一、下载sw_urdf_exporter插件 ROS目前提供了SolidWorks转URDF的插件,叫做sw_urdf_exporter,从http://wiki.ros.org/sw_urdf_exporter下载sw2urdfSetup.exe文件,下载后点击安装,安装完成后就能在solidworks中导出URDF模型了。 二、创建solidworks模型 下面以较为简单的四轮小车为例进行说...

weixin_45168199的博客 4万+

ListView控件--SimpleAdapter适配器

SimpleAdapter 适配器用于绑定到条目上 五个参数: 上下文对象 person数据,就是要绑定到条目的数据 需要绑定到哪个条目界面 把data里面key值为name的绑定到R.id.name,就是第五个参数,以此类推 需要绑定的条目界面上的哪个控件id,以此类推 listView.setAdapter(adapter); 为listView设置适配器 setAdapter内部的操作代码逻辑 //为listView设置设配器后首先调用getCount,用于得到集合

qq_45491681的博客 1094

基于Ultralytics RT-DETR的工业缺陷检测实战:从NEU-DET数据集准备到模型部署

本文详细介绍了基于Ultralytics框架和RT-DETR模型进行工业缺陷检测的完整实战流程。内容涵盖从NEU-DET数据集准备、YOLO格式转换、环境配置,到模型训练、关键参数调优、性能验证与可视化分析,最后提供了ONNX等格式的模型部署方案,为工业质检场景提供了一套高效、可落地的AI解决方案。

weixin_29168393的博客 339

[安卓开发] 下拉框Spinner与适配器ArrayAdapter/SimpleAdapter的使用

简单介绍Spinner和Adapter Spinner是下拉框,用于从一串列表中选择某项,功能类似于单选按钮的组合。下拉列表的展示方式有 两种,一种是在当前下拉框的正下方展示列表,此时把spinnerMode属性设置为dropdown;另一种是在页面 中部以对话框形式展示列表,此时把spinnerMode属性设置为dialog。 适配器Adapter的作用主要是用来给诸如(Spinner、ListView、GridView)来填充数据。常用的适配器有ArrayAdapter, SimpleAdapt..

s1ngle的博客 4712

PCL 三次均匀B样条曲线拟合

PCL 三次均匀B样条曲线拟合

dayuhaitang1的博客 402

YOLOv8与注意力机制融合:EMA(高效多维注意力)的原理剖析与实战应用

本文介绍了如何在YOLOv8目标检测模型中集成EMA(高效多尺度注意力)机制。主要内容包括:EMA注意力机制的工作原理解析,展示其多尺度特征融合和高效计算特性;详细的环境配置与依赖安装指南;EMA模块的完整代码实现,包含分组处理、空间注意力权重计算和特征融合等关键步骤;以及将EMA集成到YOLOv8网络结构的方法。通过添加EMA模块,可以提升模型对关键特征的关注能力,有效抑制背景干扰,从而增强目标检测性能。本教程提供了从原理到实现的完整解决方案。

m0_64661770的博客 147

7、ListView的几种适配器及自定义适配器

ListView是我们在Android应用开发中常用的组件,它通过列表的形式展示数据,具有很强的可扩展性,通常使用还会给每一项绑定一个点击时间,用于处理相应的请求,ListView在电商的商品列表中是必不可少的,下面我们介绍几种常用的使用方法。           列表的显示需要三个元素:           1.ListVeiw   用来展示列表的View。     

逆袭的青年的专栏 1万+

Windows原生与WSL2环境下OpenClaw性能与兼容性的对比分析研究

本文对比分析了Windows原生环境与WSL2环境下运行OpenClaw的性能与兼容性。Windows原生环境提供深度系统集成、图形界面支持和硬件加速优势,适合需要Windows生态集成的用户;WSL2则提供接近原生Linux的性能体验,兼容Linux工具链,适合开发者和跨平台需求。文章详细介绍了两种环境下的推荐硬件配置、系统版本选择及必备工具,并提供了具体的部署步骤指南。研究表明,两种环境各有适用场景,用户可根据需求选择最适合的部署方式。

一键难忘的博客 1218

ListView适配器

qq_45808858的博客 1751

【Unity实战篇】 接入百度翻译,实现文本自动翻译功能

日常在做项目的过程中,游戏本地化几乎已经成为必不可少的一步。 本篇文章将演示怎样在Unity中接入百度翻译,实现文本自动翻译的功能。

努力前行,总会成为自己心中的那道光 9059

2024阅读AOSP源码的正确打开姿势

在Android系统开发中,阅读AOSP(Android Open Source Project)源码是非常重要的环节。然而,如何构建一个优雅的阅读环境却是一个不容忽视的问题。本文将介绍不同工具和方法下阅读AOSP源码的正确姿势,并对比其优缺点。

虎哥LoveDroid 2707

高级控件ListView以及自定义适配器

一 ListView 列表控件 使用的时候高度和宽度最好是设置为match_parent 二 自定义适配器 1.BaseAdapter:是所有适配器类的父类,可以对列表项进行最大限度的定制 2.写一个类继承自BaseAdapter,实现四个方法: getCount :返回当前ListView或者Spinner等控件要显示多少条数据 getView (int postion,View con...

Soul717的博客 441

IsaacSim环境配置之配置本地资产包

摘要:Isaac Sim官方资产文件默认从美国服务器下载速度慢,影响开发体验。建议下载本地资产包并配置本地资源源。具体步骤包括:1) 下载资产包并解压;2) 修改Isaac Sim安装路径下的配置文件,添加本地资产路径配置,包括机器人、人物、环境等各类资源目录。配置完成后可显著提升资产加载速度,改善开发效率。文中提供了详细的配置文件修改示例和截图说明。

拥抱具身智能,昇腾Ascend C 330

Android的自定义ListView适配器

ListView作为一个实际开发中使用率非常高的视图,一般的系统自带的适配器都无法满足开发中的需求,这时候就需要开发人员来自定义适配器使得ListView能够有一个不错的显示效果。 正文 示例:实现图片文字混合列表 代码 代码如下(示例): 1 package com.example.work; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.List; 6 7 8 import

每天不是在写bug就是在写bug的路上 802

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

关于listview的自定义适配器

listview是什么? listview是展示列表的view listview的作用? 展示列表 适配器的作用是什么? 适配器是将数据显示在listview上的中介 数据是什么? 具体的将被映射的字符串,图片,或者基本组件。 listview自定义适配器的步骤? 第一步:创建listview xml文件 并找到id; 第二步:创建一个装数据的容器 此处我用的是arr...

206

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ListView的几种适配器及自定义适配器

ListView是我们在Android应用开发中常用的组件,它通过列表的形式展示数据,具有很强的可扩展性,通常使用还会给每一项绑定一个点击时间,用于处理相应的请求,ListView在电商的商品列表中是必不可少的,下面我们介绍几种常用的使用方法。  列表的显示需要三个元素:           1.ListVeiw   用来展示列表的View。           2.适配器   

zengguangchun的博客 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

ListView之自定义适配器的使用

1通过.实例来描述:  二..实现此功能有以下步骤: 1.ListView及ListView_Item 2.实体类的编写 3.自定义适配器的书写 4.ListView的绑定数据源与控件 自定义适配器MyAdapter package cn.edu.bzu.list_view1; import java.util.List; import

wangjiani112的博客 639

Android学习笔记--ListView、自定义适配器、模糊查找

安卓学习笔记--ListView、自定义适配器、模糊查找、RecyclerViewListView的基本使用最简单的ListView为ListView设置点击事件自定义适配器如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 ListView的基本使用 最简单的ListVie

qq_44248026的博客 2868

自定义ListView适配器继承BaseAdapter

在开发中,我们经常使用到ListView这个控件。Android的API也提供了许多创建ListView适配器的快捷方式。例如ArrayAdapter、SimpleAdapter和SimpleCursorAdapter等。但你是否发现,如果采用这些系统自带的适配器,对于事件的响应只能局限在一个行单位。假设一行里面有一个按钮和一个图片控件,它们之间的响应操作是不一样的。若采用系统自带的适配器,就不能

LovelyCoder 1226

自定义ListView适配器

public class MylistAdapter extends BaseAdapter{ public List> list;     //数据 public Context context;   public int width; public MylistAdapter(Context context,List> list,int width) { this.widt

sxw520xxx的博客 232

Android ListView:具有ImageView的自定义适配器

在上一篇文章中,我们讨论了自定义适配器。 我们只使用了一个非常简单的适配器和一个TextView 。 我们想扩展前面描述的想法,并为每个行星介绍一个图像。 为此,我们必须修改布局和其他代码部分以处理用户单击每个项目的情况。 我们希望ListView中的每一行看起来像: 我们要做的第一件事是修改布局并使用RelativeLayout而不是简单的LinearLayout。 我们的布局如...

530

Android ListView控件的使用(自定义适配器 + ListView + 解决OOM )

项目中遇到的问题,上网查阅以及自己思考解决了ListView控件的使用问题,废话不多说,程序运行图如下所示:                                                                            常规的方法我们通常采用的是ListView + SimpleAdapter来实现上述的界面,代码很简单,逻辑很清楚。但是如果我想要点击比

Danielntz的博客 934

ListView自定义适配器 优化

今天学习了list的自定义适配器,本以为能够把view以及对应的数据全都存放在listview就万事大吉了,但是没考虑到一点,那就是内存的使用问题,当我们使用getview不停得加载listview中数据时,有一段代码是不断重复执行的,那就是我们对应的搜索空间的代码 public View getView(int position, View convertView, ViewGroup p

qq_29225597的博客 297

ListView(下)自定义适配器

(一) 1.效果图 2.activity_main.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="...

151

ListView自定义适配器+解决Scroll与listview滑动冲突

listview自定义适配器以及解决滑动冲突 生成一个类继承BaseAdpter继承方法 package adpter; import android.content.Context; import android.media.Image; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewParent; import an

u014627911的博客 264

自定义适配器android,Android的listview使用之2,自定义适配器

前面我们已经了解到了Listview的最基本用法,是不是觉得只是展示单纯的文字信息比较单调,那我们现在就马上来看listview使用之,自定义适配器,使用这个以后,就可以展示各种各样的数据啦。先看效果第一步 新建一个类 继承BaseAdapter 可以看到必须实现四个方法 下面来一一解释第一个getCount方法 返回整个list里面数据的个数第二个getItem方法 返回没一个Ite...

weixin_28687251的博客 334
上一篇: Linux常用命令大全
下一篇: android:三种菜单(Menu)的设置
AlwaysDebug
博客等级 码龄11年 2粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值