Android开发——ListView

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_height="match_parent"android:layout_width="match_parent"android:id="@+id/main"android:orientation="vertical"><ListViewandroid:id="@+id/lv"android:layout_width="match_parent"android:layout_height="match_parent"></ListView></LinearLayout>

item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:id="@+id/tv"android:layout_width="match_parent"android:layout_height="match_parent"android:textSize="30sp"/></LinearLayout>

item.xml 是用于定义列表项布局的 XML 文件。在 Android 中,通常使用 ListViewRecyclerView 来显示列表数据,而列表中的每一项就是一个列表项。item.xml 文件用于定义列表中每一项的布局结构,包括显示数据的控件(如 TextViewImageView 等)以及它们的样式和排列方式。

在使用 ListViewRecyclerView 时,你需要创建一个适配器(Adapter),并在适配器中指定列表项的布局文件(即 item.xml),以便在列表中显示每一项的内容。适配器根据数据源中的数据,动态地加载布局文件,并将数据填充到布局中,然后显示在列表中。

因此,item.xml 文件的作用是定义列表中每一项的布局结构,它决定了列表中每个数据项的显示样式和内容:

MyAdapter.java

package com.example.myapplication;import android.annotation.SuppressLint;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;import java.util.ArrayList;public class MyAdapter extends BaseAdapter {private final ArrayList<bean> data;private final Context context;public MyAdapter(ArrayList<bean> data,Context context){this.data = data;this.context = context;}@Overridepublic int getCount() {return data.size();}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return position;}@SuppressLint("SuspiciousIndentation")@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder viewHolder;if (convertView == null) {convertView = LayoutInflater.from(context).inflate(R.layout.item, parent, false);viewHolder = new ViewHolder();viewHolder.textView = convertView.findViewById(R.id.tv);convertView.setTag(viewHolder);} else {viewHolder = (ViewHolder) convertView.getTag();}viewHolder.textView.setText(data.get(position).getName());return convertView;}static class ViewHolder {TextView textView;}}

这段代码是一个自定义的适配器(Adapter),用于将数据绑定到列表视图(ListView)中。逐步解释:

  1. MyAdapter 类继承自 BaseAdapter,它是 Android 中适配器的基类之一,用于在列表视图中显示数据。
  2. 构造方法 MyAdapter(ArrayList<bean> data, Context context) 接收一个 ArrayList 类型的数据源和一个上下文对象。数据源是用来填充列表项的数据,而上下文对象用于加载布局文件。
  3. getCount() 方法返回数据源中的数据项数量,即列表中的项数。
  4. getItem() 方法根据位置返回数据项。
  5. getItemId() 方法返回数据项的唯一标识符,通常是其在数据源中的位置。
  6. getView() 方法用于获取每个列表项的视图。它接收三个参数:位置(position)、可重用的视图(convertView)和列表的父视图(parent)。
    • 在方法中,首先通过 LayoutInflater 加载列表项的布局文件 R.layout.item,如果 convertView 为 null,则新建一个视图,并将其缓存在 ViewHolder 对象中,以提高性能。
    • 然后,从缓存的 ViewHolder 对象中获取视图控件,并将数据绑定到控件上,设置相应的文本。
    • 最后,返回填充好数据的视图。
  7. ViewHolder 类是一个内部静态类,用于缓存列表项中的视图控件,以便在滚动列表时快速访问,提高性能。

MainActivity.java

package com.example.myapplication;import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import java.util.ArrayList;public class MainActivity extends AppCompatActivity {private final ArrayList<bean> data = new ArrayList<>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_main);ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);return insets;});for(int i=0;i<100;i++){bean bn = new bean();bn.setName("WJH"+i);data.add(bn);}ListView listview = findViewById(R.id.lv);listview.setAdapter(new MyAdapter(data,this));}}
  1. MainActivity 类继承自 AppCompatActivity,它是 Android 中的一个活动(Activity)类,用于展示用户界面和处理用户交互。
  2. onCreate() 方法中,首先调用了父类的 onCreate() 方法以执行基本的初始化操作。
  3. 接着调用 EdgeToEdge.enable(this) 方法启用了边缘到边缘布局,该方法来自于第三方库,用于在 Android 应用中实现全屏显示。
  4. 使用 setContentView(R.layout.activity_main) 方法设置了当前活动的布局为 activity_main.xml
  5. 使用 ViewCompat.setOnApplyWindowInsetsListener() 方法监听窗口布局变化,并在发生变化时调整主布局的内边距,以适应系统状态栏和导航栏。
  6. 创建了一个包含 100 个 bean 对象(自定义对象)的 ArrayList,用于作为列表视图的数据源。
  7. 使用 for 循环生成 100 个 bean 对象,并设置它们的名称。
  8. 获取列表视图对象 ListView 并通过 findViewById() 方法找到对应的视图。
  9. 使用自定义的适配器 MyAdapter 将数据源绑定到列表视图上,从而在界面上显示出来。

综上所述,这段代码实现了一个简单的活动,在界面中显示了一个包含 100 个列表项的列表视图,并且使用了边缘到边缘布局来实现全屏显示效果。

PS:

适配器类的作用是:

  1. 数据适配: Adapter类用于将数据源与UI控件进行绑定,将数据适配到特定的UI组件中,比如ListView、RecyclerView等。它负责从数据源中获取数据,并将数据呈现到相应的UI组件上。

  2. 视图渲染: Adapter负责渲染数据项的视图,即将数据显示在UI组件上。在Adapter中,通过实现getView()方法,可以定义每个数据项的呈现方式,包括布局、样式、内容等。

  3. 视图复用: 为了提高性能和节省资源,Android中的ListView、RecyclerView等UI组件在滚动时会复用已经创建的视图对象。Adapter类负责管理视图的创建和复用,确保在滚动过程中能够高效地显示数据。

  4. ViewHolder模式: 为了进一步提高性能,Adapter类通常会采用ViewHolder模式对视图进行缓存。ViewHolder是一个简单的Java类,用于保存视图对象的引用,避免在getView()方法中重复查找视图,从而提高渲染效率。

  5. 数据更新: 当数据源发生变化时,Adapter负责通知UI组件进行相应的更新。它提供了一系列的方法,比如notifyDataSetChanged()、notifyItemInserted()等,用于通知UI组件刷新数据。

总的来说,Adapter类在Android开发中起到了桥梁的作用,连接了数据源和UI组件,负责将数据呈现到界面上,并提供了一系列的方法和机制,保证了界面的流畅性和用户体验

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/825851.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3D模型格式转换工具HOOPS Exchange:3D CAD数据的快速导入与导出

在当今的工程设计领域中&#xff0c;快速且可靠地处理3D CAD数据是至关重要的。HOOPS Exchange SDK通过提供一组C软件库&#xff0c;为开发团队提供了实现这一目标的有效工具。 什么是HOOPS Exchange&#xff1f; HOOPS Exchange是一组C软件库&#xff0c;旨在为开发团队提供…

YOLOv1精读笔记

YOLO系列 摘要1. 将目标检测视为一个回归问题2. 定位准确率不如 SOTA&#xff0c;但背景错误率更低3. 泛化能力强 1.引言1.1 YOLO 速度很快1.2 全局推理 2. Unified Detection2.1 网络设计2.2 训练YOLOv1模型损失函数的选择和其潜在的问题YOLOv1模型如何改进其损失函数来更好地…

【史上最全】带你全方位了解containerd 的几种插件扩展模式

除了 snapshotter&#xff0c;containerd 的扩展机制你还了解哪些&#xff1f; 本文内容节选自 《containerd 原理剖析与实战》&#xff0c;本书正参加限时优惠内购&#xff0c;限时 69.9 元购买。 进入正题之前先看一下 containerd 的整体架构 1. containerd 架构 图 contain…

UE4_常见动画节点学习_Two Bone IK双骨骼IK

学习资料&#xff0c;仅供参考&#xff01; Two Bone IK 控制器将逆运动&#xff08;IK&#xff09;解算器应用于到如角色四肢等3关节链。 变量&#xff08; HandIKWeight &#xff09;被用于在角色的 hand_l 和 hand_r 控制器上驱动 关节目标位置&#xff08;Joint Target Lo…

Navicat连接postgresql时出现‘datlastsysoid does not exist‘报错的问题

连接报错 解决方案 解决方法1&#xff1a;升级navicat 解决方法2&#xff1a;降级pgsql 解决方法3&#xff1a;修改dll 使用3解决 实操演示 1、 打开 Navicat 安装目录&#xff0c;找到libcc.dll文件 2、备份libcc.dll文件&#xff0c;将其复制并粘贴或者修改副本为任何其他名…

【C++杂项】cin的详细用法

cin详细用法 1. cin简介2. cin的常用读取方法2.1 cin>>的用法2.2 cin.get的用法2.3 cin.getline的用法 3. cin清空输入缓冲区4. 其它方法4.1 getline()读取一行 1. cin简介 cin是C中的标准输入流对象&#xff0c;即istream类的对象。cin主要用于从标准输入读取数据&…

DNS服务器的管理与配置

目录 一、相关知识 域名空间 DNS服务器分类 域名解析过程 资源记录 二、安装DNS服务 安装bind软件包 DNS服务的启动与停止 配置主要名称服务器 主配置文件 从例子学起&#xff1a; &#xff08;1&#xff09;建立主配置文件named.conf &#xff08;2&#xff09;…

Windows10安装Docker Desktop(大妈看了都会)

目录 Windows10安装Docker Desktop&#xff08;大妈看了都会&#xff09; 1.前言 1.1 为什么要在Windows10上安装Docker 1.2 Docker Desktop介绍 2.下载Docker Desktop 3.启用Hyper-V以在 Windows 10上创建虚拟机 4.安装Docker Desktop 5.运行Docker Desktop 6.Docker…

阿里云图片处理之 缩放

文档 : https://help.aliyun.com/zh/oss/user-guide/resize-images-4?spma2c4g.11186623.0.0.61cd2759v4jkhX 需求 : 图片过大, 导致加载过慢, 需对图片进行压缩 <image :src"imgUrl ?x-oss-processimage/resize,h_700,m_lfit"></image>Ps : 题外话…

如何下载省,市,区县行政区Shp数据

摘要&#xff1a;一般非专业的GIS应用通常会用到省市等行政区区划边界空间数据做分析&#xff0c;本文简单介绍了如何在互联网上下载省&#xff0c;市&#xff0c;区县的shp格式空间边界数据&#xff0c;并介绍了一个好用的在线数据转换工具&#xff0c;并且开源。 目录 一、下…

深度 | 践行绿色健康可持续发展,这家企业提供了价值范本

文 | 螳螂观察 作者 | 余一 近段时间以来&#xff0c;小米SU7热度一直不减&#xff0c;在展露小米强大品牌号召力的同时&#xff0c;也侧面体现出了当前消费者对于新能源汽车的喜爱。 而消费者选择新能源汽车时&#xff0c;环保因素也起到了至关重要的作用。像前几日&#x…

数据结构-上三角矩阵存储方式[0知识掌握]

目标&#xff1a;看完本文章你将会了解上三角矩阵的存储方式以及矩阵中数据的位置索引号如何求 难点&#xff1a;上三角矩阵的公式推导&#xff0c;上三角任意位置对应的存储位置。 一、准备知识 1.求和公式 前n项和&#xff1a;Sn n(a1an)/2 公差&#xff1a;d后项-前项…

【JavaEE多线程】线程安全、锁机制及线程间通信

目录 线程安全线程安全问题的原因 synchronized 关键字-监视器锁monitor locksynchronized的特性互斥刷新内存可重入 synchronized使用范例 volatilevolatile能保证内存可见性volatile不保证原子性synchronized 也能保证内存可见性 wait 和 notifywait()方法notify()方法notify…

拖拽式工作流有哪几个优势?

在信息技术迅猛发展的今天&#xff0c;如何助力中小型企业在数字化转型的过程中平稳过渡&#xff1f;又是如何让中小型企业摆脱数据孤岛、成本投入高等各种瓶颈和难题&#xff1f;低代码技术平台是近些年较为理想的平台产品&#xff0c;其中拖拽式工作流优势特点突出&#xff0…

地埋电缆故障检测方法有哪些?地埋电缆故障检测费用是多少?

地埋电缆故障检测方法主要涵盖脉冲反射法、桥接法、高压闪络法和声波定位法等多种方法。选择适当的方法取决于故障类型、电缆类型和实际现场条件。至于地埋电缆故障检测费用则受到多个因素的影响&#xff0c;包括故障类型、检测方法的复杂性、检测设备的先进程度以及所处地区的…

从零开始搭建社交圈子系统:充实人脉的最佳路径

线上交友圈&#xff1a;拓展社交网络的新时代 线上交友圈是社交网络的新引擎&#xff0c;提供了更广泛的社交机会&#xff0c;注重共同兴趣的连接&#xff0c;强调多样性的社交形式&#xff0c;更真实地展示自己&#xff0c;让朋友更全面地了解我们的生活状态。虽然虚拟交往存在…

SD-WAN解决电商企业海外业务网络难题

全球化背景下&#xff0c;众多国内企业都涉及到海外贸易业务&#xff0c;尤其是出海电商得到蓬勃发展。企业做出海电商&#xff0c;需要访问国外网页、社交平台&#xff0c;如亚马逊、TikTok、Facebook、YouTube等与客户沟通互动&#xff0c;SD-WAN的发展正好为解决国际网络访问…

14 Php学习:表单

表单 PHP 表单是用于收集用户输入的工具&#xff0c;通常用于网站开发。PHP 可以与 HTML 表单一起使用&#xff0c;用于处理用户提交的数据。通过 PHP 表单&#xff0c;您可以创建各种类型的表单&#xff0c;包括文本输入框、复选框、下拉菜单等&#xff0c;以便用户可以填写和…

主存储器与CPU之间的连接(会画图)

位扩展 字扩展 由于只有A13&#xff0c; A14 连到了译码器上&#xff0c;以、因此该译码器是一个 2/4 译码器&#xff0c;对应的选片有四种。选中第一个选片&#xff0c;就是把译码器“0口置0&#xff0c; 1~3口置1”&#xff0c;因为CS有非号&#xff0c;因此&#xff0c;低电…

【C++】string的使用

目录 1、为什么学习string类&#xff1f; 2、标准库中的string类 2.1 string类 2.2 string类的常见接口声明 2.2.1 string类的常见构造 ​编辑 2.2.2 string类对象的访问及遍历操作 2.2.3 string类对象的容量操作 2.2.4 string类对象的修改操作 ​编辑 1、为什么学习s…