ListView的使用

📖ListView的使用

    • ✅1. 创建ListView
    • ✅2. 创建适配器Adapter
    • ✅3. 开始渲染数据

主要3步骤:

  • 创建ListView

  • 创建适配器Adapter,和Adapter对应的视图

  • 开始渲染数据

效果图:

Snipaste_2024-06-12_23-50-43

✅1. 创建ListView

例如现有DemoActivity页面,对于布局文件activity_demo.xml

1.在activity_demo.xml中创建ListView组件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".DemoActivity"><!--创建ListView--><ListViewandroid:id="@+id/lv_list"android:layout_width="match_parent"android:layout_height="wrap_content"android:divider="@null" /></LinearLayout>

2.在DemoActivity页面中获取组件

private static ListView lv_list;//全局声明protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_demo);lv_list = findViewById(R.id.lv_list);//获取视图组件}

✅2. 创建适配器Adapter

1.例如创建一个学生适配器StudentListAdapter,并继承BaseAdapter

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 com.st.bottomnavigation.R;
import com.st.bottomnavigation.bean.Student;import java.util.List;public class StudentListAdapter extends BaseAdapter {private Context mContext;//上下文private List<Student> studentList;//数据//构造方法public StudentListAdapter(Context mContext) {this.mContext = mContext;}//设置数据public void setData( List<Student> studentList){this.studentList = studentList;}//加载新的数据public void addData(List<Student> newData) {studentList.addAll(newData);}@Overridepublic int getCount() {return studentList.size();}@Overridepublic Object getItem(int i) {return studentList.get(i);}@Overridepublic long getItemId(int i) {return i;}@Overridepublic View getView(int position, View convertView, ViewGroup viewGroup) {ViewHolder holder;// 1.推断是不是第一次进来if (convertView == null){convertView = LayoutInflater.from(mContext).inflate(R.layout.item_stu_listview,null);holder = new ViewHolder();holder.stuNo = convertView.findViewById(R.id.stuNo);  //holder.stuName = convertView.findViewById(R.id.stuName);  //convertView.setTag(holder);//标记,能够复用}else {holder = (ViewHolder) convertView.getTag();}//2.填充数据Student student = studentList.get(position);holder.stuNo.setText(student.getStuNo());  //学号holder.stuName.setText(student.getStuName());  //姓名//3.返回convertViewreturn convertView;}//创建ViewHolder,定义item_stu_listview.xml中的组件public final class ViewHolder {TextView stuNo;    //TextView stuName;  //}
}

2.创建实体类Student

public class Student {private String stuNo;private String stuName;public String getStuNo() {return stuNo;}public void setStuNo(String stuNo) {this.stuNo = stuNo;}public String getStuName() {return stuName;}public void setStuName(String stuName) {this.stuName = stuName;}
}

3.创建对应视图文件item_stu_listview.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="wrap_content"android:background="#eeeeee"android:paddingTop="4dp"android:paddingBottom="4dp"android:paddingLeft="4dp"android:paddingRight="4dp"android:descendantFocusability="blocksDescendants"android:orientation="vertical"><LinearLayoutandroid:id="@+id/ll_item"android:layout_width="match_parent"android:layout_height="wrap_content"android:paddingBottom="10dp"android:paddingTop="10dp"android:paddingLeft="10dp"android:background="@drawable/shape_background_white"android:orientation="vertical"><!--第一行--><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="学号:" /><TextViewandroid:id="@+id/stuNo"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="" /></LinearLayout><!--第二行--><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="姓名:" /><TextViewandroid:id="@+id/stuName"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="" /></LinearLayout></LinearLayout></LinearLayout>

对应的shape_background_white.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" ><solid android:color="#FFFFFFFF" /><strokeandroid:width="0dp"android:color="#999999" /><corners android:radius="10dp" /></shape>

✅3. 开始渲染数据

1.造数据,也可以直接从后端数据库获取的数据

   public List<Student> getData(){List<Student> list = new ArrayList<>();for (int i = 0; i < 10; i++) {Student student = new Student();student.setStuName("学生"+i);student.setStuNo(1000+i+"");list.add(student);}return list;}

2.封装渲染方法showStudentListView

    private void showStudentListView(List<Student> studentList) {if(studentListAdapter == null) {//第一次加载studentListAdapter = new StudentListAdapter(this);studentListAdapter.setData(studentList);lv_list.setAdapter(studentListAdapter);// 设置列表视图的适配器}else {// 非第一次,更新数据studentListAdapter.setData(studentList);studentListAdapter.notifyDataSetChanged();}}

3.调用并显示数据

List<Student> studentList = getData();//获取数据
showStudentListView(studentList);//显示数据

Snipaste_2024-06-12_23-50-43

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

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

相关文章

Eureka到Nacos迁移实战:解决配置冲突与启动异常

问题&#xff1a;Eureka到Nacos迁移实战&#xff1a;解决配置冲突与启动异常 在进行微服务架构升级&#xff0c;特别是注册中心从Eureka转向Nacos的过程中&#xff0c;我遇到了一个典型的技术挑战。目标是为了减少因配置变更导致的服务重启频率&#xff0c;我决定拥抱Nacos以其…

机器学习实现面部识别的背后技术详解

引言 面部识别技术在身份验证、安全监控和个性化服务等领域具有广泛的应用。随着机器学习技术的进步&#xff0c;尤其是深度学习的发展&#xff0c;面部识别系统的性能得到了显著提升。本文将详细介绍机器学习实现面部识别的技术&#xff0c;并通过代码示例来展示其背后的技术…

云平台DNS故障导致网站访问卡顿异常排查过程,wireshark、strace等工具在实际问题排查过程中的应用方法

一、问题现象 项目上使用华为私有云&#xff0c;前段时间华为升级云平台后&#xff0c;云上用户反馈业务系统出现卡顿&#xff0c;之前几秒可以刷新出来的页面现在需要几十秒。提供了一个比较明显的url和curl调用方法。 10.213.x.xxx:8082/files/login curl -H "Content-…

项目实战--文档搜索引擎

在我们的学习过程中&#xff0c;会阅读很多的文档&#xff0c;例如jdk的API文档&#xff0c;但是在这样的大型文档中&#xff0c;如果没有搜索功能&#xff0c;我们是很难找到我们想查阅的内容的&#xff0c;于是我们可以实现一个搜索引擎来帮助我们阅读文档。 1. 实现思路 1…

依据容器创建本地镜像

1 2 3 4 5 6 7 8 9 10 11 12 13 1 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 在本地创建一个容器后&#xff0c;可以依据这个容器创建本地镜像&#xff0c;并可把这个镜像推送到Docker hub中。 目录 根据镜像启动…

Java——IO流(一)-(4/8):前置知识-字符集、UTF-8、GBK、ASCII、乱码问题、编码和解码等

目录 常见字符集介绍 标准ASCII字符集 GBK&#xff08;汉字内码扩展规范&#xff0c;国标&#xff09; Unicode字符集&#xff08;统一码&#xff0c;万国码&#xff09; 小结 字符集的编码、解码操作 方法 实例演示 常见字符集介绍 标准ASCII字符集 ASCll(American St…

Java如何根据对象属性值从对象列表中获取满足条件的对象

实现方式 在java 中&#xff0c;根据对象属性值从对象列表中获取满足条件的对象&#xff0c;可以使用以下2种方法&#xff1a; 使用循环遍历&#xff1a; 手动遍历列表。 使用流&#xff08;Streams&#xff09;API&#xff1a; 利用 Java 8 引入的 Streams 来简化代码。 示…

Sklearn中逻辑回归建模

分类模型的评估 回归模型的评估方法&#xff0c;主要有均方误差MSE&#xff0c;R方得分等指标&#xff0c;在分类模型中&#xff0c;我们主要应用的是准确率这个评估指标&#xff0c;除此之外&#xff0c;常用的二分类模型的模型评估指标还有召回率&#xff08;Recall&#xff…

Golang | Leetcode Golang题解之第150题逆波兰表达式求值

题目&#xff1a; 题解&#xff1a; func evalRPN(tokens []string) int {stack : make([]int, (len(tokens)1)/2)index : -1for _, token : range tokens {val, err : strconv.Atoi(token)if err nil {indexstack[index] val} else {index--switch token {case ""…

Maven 核心插件 maven-resources-plugin 使用详解

Maven 核心插件 maven-resources-plugin 负责处理项目中的资源文件。它的主要功能是将资源从源目录&#xff08;如 src/main/resources&#xff09;复制到目标目录&#xff08;如 target/classes&#xff09;&#xff0c;并在此过程中进行必要的过滤和替换操作&#xff0c;如替…

PCL 低阶多项式求解

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这里使用C++实现对二阶和三阶多项式的求解过程(求解多项式的根),其推导过程网上有很多,这里就不多叙述了。 二、实现代码 RootsPolynomial.h #pragma once#include <algorithm> #include <cstdint>…

LeetCode题解:2303. 计算应缴税款总额,JavaScript,详细注释

原题链接&#xff1a; https://leetcode.cn/problems/calculate-amount-paid-in-taxes/ 解题思路&#xff1a; 该题的目标是把收入分层几个区间&#xff0c;每个区间内部的金额单独计算纳税额以[[3,50],[7,10],[12,25]]为例&#xff0c;该题要计算的分别是&#xff1a; [0, 3…

MATLAB神经网络---regressionLayer回归输出层

回归输出层regressionLayer 回归层计算回归任务的半均方误差损失。 Matlab中的regressionLayer函数是一个深度学习工具箱中的函数,用于定义回归问题的损失函数层。它可用于神经网络模型的最后一层&#xff0c;将预测值与目标值进行比较,并计算出损失值。 语法 layer regre…

WPF学习(3)--不同类通过接口实现同种方法

一、接口概述 1.接口的概念 在C#中&#xff0c;接口&#xff08;interface&#xff09;是一种引用类型&#xff0c;它定义了一组方法、属性、事件或索引器&#xff0c;但不提供实现。接口只定义成员的签名&#xff0c;而具体的实现由实现接口的类或结构体提供。接口使用关键字…

MySQL备份与恢复:确保数据的安全与可靠性

引言: 数据的安全性和可靠性的重要性 在现代企业和组织中,数据已经成为了最重要的资产之一。数据的安全性和可靠性对于企业的运营至关重要。首先,数据的安全性保证了敏感信息不会落入错误的手中,防止了潜在的经济损失和法律风险。其次,数据的可靠性则确保了企业能够准确…

AI学习指南机器学习篇-支持向量机超参数调优

AI学习指南机器学习篇-支持向量机超参数调优 在机器学习领域中&#xff0c;支持向量机&#xff08;Support Vector Machines&#xff0c;SVM&#xff09;是一种非常常用的监督学习模型。它通过寻找一个最优的超平面来进行分类和回归任务。然而&#xff0c;在实际应用中&#x…

数据赋能(118)——体系:数据收集——技术方法、主要工具

技术方法 数据收集的技术方法多种多样&#xff0c;以下是一些主要的技术手段&#xff1a; 网络爬虫&#xff1a;这是一种自动化程序&#xff0c;能够遍历互联网上的网页并提取所需信息。网络爬虫可以有效地收集大规模的结构化和非结构化数据&#xff0c;为后续的数据分析和挖…

【Go】使用Go语言实现AES CBC No Padding加密和解密

冷雨悄悄停吧 天真的心因为你 那管多风雨天仍和你一起 告诉你我其实多么的想你 其实我我真的爱着你 &#x1f3b5; 蒋明周《真的爱着你》 引言 高级加密标准&#xff08;AES&#xff09;是一种广泛使用的加密算法。它可以工作在多种模式下&#xff0c;最…

Cesium4Unreal - # 009 直接加载显示shapefile

文章目录 直接加载显示shapefile1 思路2 步骤2.1 下载shapelib2.2 添加依赖模块2.3 创建Actor2.3.1 MyShapeLoaderActor.h2.3.2 MyShapeLoaderActor.cpp2.3 蓝图代码直接加载显示shapefile 1 思路 在Unreal Engine中加载显示shapefile无非就是从shapefile中读取几何数据,并且…

【车载音视频电脑】嵌入式AI分析车载DVR,支持8路1080P

产品特点 采用H.265 & H.264编解码&#xff0c;节约存储空间、传输流量&#xff1b; 高分辨率&#xff1a;支持8路1080P*15FPS/4路1080P*30FPS、720P、D1等编解码&#xff1b; 支持1张SATA硬盘&#xff0c;取用方便&#xff0c;满足大容量存储要求&#xff1b; 支持1个…