ListView用例配合ViewHolder缓存

article/2025/9/28 18:52:36

用android studio 在android 7中运行的 

由UIActivityt 和 listview_layout.xml 和 list_item.xml写出来ListView用例

 

UIActivityt 代码

package com.example.a20200712;import android.database.DataSetObserver;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class UIActivity extends AppCompatActivity {private ListView listview = null;private List<Map<String,Object>> list = null;private BaseAdapter ba = null;/*** 原数据*/public void init() {list = new ArrayList<Map<String,Object>>(3);for(int i = 1 ;i < 50;i++){Map<String,Object> map1 = new HashMap<String,Object>();map1.put("img" ,R.drawable.kf);map1.put("head","第"+i+"张");map1.put("txt","数字"+i+i+i+i+i);map1.put("id",Long.valueOf(i));list.add(map1);}}@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.listview_layout);init();showListView();}public void showListView() {listview = findViewById(R.id.layout_listView);ba = new BaseAdapter() {//获取列表总条数@Overridepublic int getCount() {return list.size();}//获取对应的list单个对象 在单击事件中返回对应的对象信息@Overridepublic Object getItem(int position) {return list.get(position);}//表列对应数据的id 尽量不要直接使用 position 动态列表在某些场景下会出错@Overridepublic long getItemId(int position) {return (Long) list.get(position).get("id");}//组装每一条list行 视图@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {ViewHolder viewHolder = null;TextView id = null;ImageView iv = null;TextView head = null;TextView txt = null;if(convertView == null){convertView = View.inflate(UIActivity.this,R.layout.list_item,null);viewHolder = new ViewHolder();id = convertView.findViewById(R.id.layout_list_item_id);iv = convertView.findViewById(R.id.layout_list_item_img);head = convertView.findViewById(R.id.layout_list_item_head);txt = convertView.findViewById(R.id.layout_list_item_txt);viewHolder.setIdV(id);viewHolder.setImV(iv);viewHolder.setHeadV(head);viewHolder.setTxtV(txt);//内容的点击事件txt.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Log.i("mw","文字-事件被触发了"+position);Map<String,Object> currentMap = (Map<String,Object>) list.get(position);list.remove(currentMap);ba.notifyDataSetChanged();}});//图处点击事件iv.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Log.i("mw","图片-事件被触发了"+position);Map<String,Object> currentMap = (Map<String,Object>) list.get(position);currentMap.put("head","修改后的数据"+(String)currentMap.get("head"));ba.notifyDataSetChanged();}});convertView.setTag(viewHolder);}else{viewHolder = (ViewHolder)convertView.getTag();id = viewHolder.getIdV();iv = viewHolder.getImV();head = viewHolder.getHeadV();txt = viewHolder.getTxtV();}id.setText(String.valueOf(list.get(position).get("id")));iv.setImageResource((Integer) list.get(position).get("img"));head.setText((String)list.get(position).get("head"));txt.setText((String)list.get(position).get("txt"));return convertView;}};listview.setAdapter(ba);//添加点击事件====对整行添加事件/*  listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {Map<String,Object> currentMap = (Map<String,Object>) adapterView.getItemAtPosition(i);//Toast.makeText(getApplicationContext(), (String)currentMap.get("head"), Toast.LENGTH_SHORT).show();currentMap.put("head","修改后的数据"+(String)currentMap.get("head"));ba.notifyDataSetChanged();// 通知修改数据}});*/}/*    public void delImgOnclick(View view){Log.i("mw","单个图片事件被触发了");Map map =  list.get(list.size()-1);list.remove(map);// Toast.makeText(getApplicationContext(),  String.valueOf(view.getId()), Toast.LENGTH_SHORT).show();ba.notifyDataSetChanged();// 通知修改数据}*/public class ViewHolder{private TextView idV;private ImageView imV;private TextView headV;private TextView txtV;public TextView getIdV() {return idV;}public void setIdV(TextView idV) {this.idV = idV;}public ImageView getImV() {return imV;}public void setImV(ImageView imV) {this.imV = imV;}public TextView getHeadV() {return headV;}public void setHeadV(TextView headV) {this.headV = headV;}public TextView getTxtV() {return txtV;}public void setTxtV(TextView txtV) {this.txtV = txtV;}}
}

 

listview_layout.xml 代码

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

list_item.xml 代码

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:visibility="invisible"android:id="@+id/layout_list_item_id"></TextView><ImageViewandroid:id="@+id/layout_list_item_img"android:layout_width="wrap_content"android:layout_height="130dp"tools:srcCompat="@tools:sample/avatars"/><TextViewandroid:id="@+id/layout_list_item_head"android:layout_width="283dp"android:layout_height="65dp"android:layout_alignParentEnd="true"android:layout_marginEnd="0dp"android:textSize="30dp"android:layout_toRightOf="@+id/layout_list_item_img"android:text="TextView" /><TextViewandroid:id="@+id/layout_list_item_txt"android:layout_width="match_parent"android:textSize="30dp"android:layout_alignParentEnd="true"android:layout_below="@+id/layout_list_item_head"android:layout_toRightOf="@+id/layout_list_item_img"android:layout_height="65dp"android:text="TextView" /></RelativeLayout>

在 android 7上运行


http://chatgpt.dhexx.cn/article/UJfeDvu4.shtml

相关文章

android 添加一维数组,Android:打造“万能”Adapter与ViewHolder

写在前面 最近一直忙着各种结课大作业&#xff0c;重新看起Android还有种亲切感。前段时间写项目的时候&#xff0c;学习了一个万能Adapter与ViewHolder的写法。说是“万能”其实就是在各种情况下都能通用。 我们知道&#xff0c;在写项目的时候&#xff0c;项目中肯定有很多的…

RecyclerView中ViewHolder重用机制理解,解决网络图片错乱和闪烁问题

&#x1f5a5; 原文转载自&#xff1a; https://blog.csdn.net/xyq046463/article/details/51800095作者&#xff1a;lanceJin. https://www.jianshu.com/p/ef7d0e16d999部分来自作者内容补充 文章目录 1. 概述2. 验证item的变化过程3. 异步网络导致ViewHolder出现图片错乱的原…

CCF CSP认证成绩代替考研复试机试!

最近整理考研资料&#xff0c;慢慢了解到CSP在考研方面还是挺有用的&#xff0c;算是给自己多了些机会。 已参加认证的高校对CSP认证成绩给予高度认可&#xff0c;部分知名院校通过不同方式对CSP认证成绩给予认可&#xff0c;其中包括&#xff1a; &#xff08;1&#xff09;…

CCF-CSP认证 202303 500分题解

202303-1 田地丈量&#xff08;矩形面积交&#xff09; 矩形面积交x轴线段交长度*y轴线段交长度 线段交长度&#xff0c;相交的时候是min右端点-max左端点&#xff0c;不相交的时候是0 #include<bits/stdc.h> using namespace std; int n,a,b,ans,x,y,x2,y2; int f(in…

谈一下两次CSP认证从180分到380分的感想

最近联系我的小可爱们比较多&#xff0c;我用qq建了一个ccf csp考试交流群&#xff0c;群号673612216&#xff0c;如果感觉有用可以加一下哦~~ 欢迎访问我的CCF认证考试题解目录哦 https://blog.csdn.net/richenyunqi/article/details/83385502&#xff0c;目前正在准备考研&am…

第22次 CCF CSP认证一二题题解及感悟

第22次 CCF CSP认证一二题题解及感悟 第一题灰度直方图题目重述题目分析代码及注释&#xff08;C&#xff09; 第二题邻域均值题目重述题目分析代码及注释&#xff08;C&#xff09;感悟 第一题灰度直方图 题目重述 一幅长宽分别为 n 个像素和 m 个像素的灰度图像可以表示为一…

CCF CSP认证2022年12月题解 现值计算、训练计划、JPEG 解码

题目 http://118.190.20.162/home.page T1 现值计算 思路 根据题意第 k k k年的 x x x元的当前价值为 x ( 1 i ) − k x\times (1i)^{-k} x(1i)−k计算各个价值&#xff0c;最后求和。 代码 int main() {int n; double i;scanf("%d %lf", &n, &i);i…

第29次CCFCSP认证经验总结

鄙人有幸参加了由中国计算机学会举办的第29次计算机软件能力认证考试&#xff0c;在此进行一些考试细节和经验的总结。 如果没有仔细了解过的小白去网上搜索CCFCSP&#xff0c;可能出现的是CSP-J/S&#xff0c;但是详细了解会发现&#xff0c;首先CSP-J/S分初试和复试&#xff…

第28次csp认证T3 JPEG 解码解析

第28次csp认证T3 JPEG 解码解析 题目说明 问题比较长&#xff0c;就只放个链接吧&#xff1a;http://118.190.20.162/view.page?gpidT158 经验分享 做这种大模拟的题目&#xff0c;对于经验不是很丰富的新手来说&#xff0c;更应该着眼于得分点&#xff0c;先做那些问题简单、…

csp认证考试准备Day-3

昨天复习了一点点&#xff0c;今天浅浅做几个第一道的真题吧 &#xff08;1&#xff09;202212-1 #include<bits/stdc.h> using namespace std; int main() {double n,i,b;scanf("%lf", &n);scanf("%lf", &i);double a[60];for(int j0;j<…

csp认证考试准备Day-1

今天&#xff0c;开启了我的第一个专栏&#xff0c;用来记录我的2023年3月的csp认证考试。 语言&#xff1a;c 本人状况&#xff1a;半学期几乎没敲过代码&#xff0c;学过c和数据结构&#xff0c;csp第一题应该能做出来。 目标&#xff1a;保证在csp考试时做出一二题&#…

第23次CSP认证题解

这是我第一次参加CSP&#xff0c;一共得了260分&#xff0c;100,70,70,20,0。这两天试着写一下题解&#xff0c;大家哪里看不懂直接留言问我就好。 目录 第一题&#xff1a;数组推导&#xff08;100分&#xff09;第二题&#xff1a;非零段划分&#xff08;100分&#xff09;第…

csp认证真题

出行计划 要在t时刻进入场所&#xff0c;获得核酸检测结果的时间点&#xff08;tk应该在[t-c1,t]内&#xff08;上段文字中c值为24&#xff09;&#xff0c;核酸检测结果才能生效。由于获得核酸检测结果的时刻>1&#xff08;因为等待核酸检测结果的时间k>0&#xff0c;所…

【经验】CCF CSP认证问题

202109-4收集卡牌 状压dp&#xff0c;注意保留10位小数&#xff0c;是样例里给出的最长的&#xff0c;五位也不行&#xff0c;double保留到小数点后15位以后就不准了 202104-2 邻域均值 要利用前缀和&#xff0c;不然会超时 202012-2 期末预测之最佳阈值 也是要利用前缀和&…

有关CCF的CSP认证

有关CCF的CSP认证 一、CSP认证考点的知识要求 在数据结构中&#xff0c;线性表是基础&#xff0c;树是常考点&#xff0c;集合和映射要夕纪学。 背包问题&#xff08;动态规划&#xff09; 考试要求 二、考试题型 第一题&#xff1a;一般为水题&#xff0c;把C学扎实便可…

记 CSP 认证

欢迎访问我的CCF认证解题目录 现在越来越忙了&#xff0c;估计后面也不参加了&#xff0c;纯粹是记录贴。 先晒一下成绩吧&#xff0c;至于为什么参加这么多次&#xff0c;主要是学校可以报销&#xff0c;干就完了&#xff0c;哈哈。 分别是 17、18、20、21 第一次参加 c…

CSP认证

【CSP】试题编号 202212-2-训练计划 题目&#xff1a;训练计划计算最早/最晚开始时间最早开始时间发散最晚开始时间 代码与上机代码上机结果 题目&#xff1a;训练计划 此题目样例有坑&#xff1a;样例中没有正确输出过一个最晚开始时间 所以在最开始处理问题的时候&#xff0…

CCF CSP认证

文章目录 :heart:[CCF CSP认证 (cspro.org)](https://www.cspro.org/):heart:1.主办单位2.认证目的3.认证内容4.认证方式5.准备认证上机环境6. 选择考试语言7. 选择编译环境8. 选择IDE9.认证前模拟练习10.成绩效力&#xff1a; ❤️CCF CSP认证 (cspro.org)❤️ 1.主办单位 中…

四大含金量高的算法证书考试

证书考试推荐 一、PAT 计算机程序设计能力测试二、CCF CSP认证三、团体程序设计天梯赛四、蓝桥杯大赛 一、PAT 计算机程序设计能力测试 官网&#xff1a;PAT 计算机程序设计能力测试 PAT为浙江大学出的一款程序设计的测试网站&#xff0c;分为乙级、甲级、顶级三种&#xff0…

2阶实对称矩阵特征值和特征向量的简单求解方法

2阶实对称矩阵特性 定理&#xff1a;2阶实对称矩阵H的特征值是实数 H[a,b;b,c] a,b,c是实数&#xff0c;λ 是特征值 A[a-λ,b;b,c-λ] 特征值求解方法为&#xff1a;(a- λ )(c- λ) - b2 0 求解方程得到两个根为&#xff1a;λ&#xff08;ac&#xff09;&…