Android之ListView实现

article/2025/9/26 9:44:54

ListView

  1. 用来显示多个可滑动项(Item)列表的ViewGroup。

  1. 需要使用Adapter(适配器)将集合数据和每一个Item所对应的布局动态适配到ListView中显示

  1. 显示列表:listView.setAdapter(adapter)

Adapter

  1. ArrayAdapter:显示最简单的列表(文本)。 集合数据为:List<String>或String[]

  1. SimpleAdapter:显示复杂列表,集合数据是数据库查询结果集。 List<Map<String,Object>>

  1. BaseAdapter:显示复杂列表。   任意类型的List<Xxx>

一,ListView+ArrayAdapter

1.创建ArrayAdapter

ArrayAdapter(Context context,int resource,T[] objects)

ArrayAdapter(Context context,int resource,List<T> objects)

其中,context:上下文对象,一般是Activity对象。

resource:Item的布局文件标识。

objects:需要显示的数据集合(Array或List)。

2.操作步骤
  1. 创建一个ListView布局的Activity;

  1. 创建一个Item的样式;

  1. 准备集合数据data;

  1. 准备ArrayAdapter对象;

  1. 设置Adapter显示列表。

这样就具备了图中的四个因素,即可实现ListView的显示效果。

3.核心代码

1).ListView

<ListView 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:id="@+id/lv_main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"></ListView>

2)item_array_adapter(简单的文本显示)

<TextView xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="70dp"android:textSize="20sp"android:gravity="center_vertical"></TextView>

3).Java

private ListView lv_main;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);lv_main = (ListView)findViewById(R.id.lv_main);//准备集合数据String[] data = {"A","B","C","D","E","F","G","H","I","J","K"};//准备ArrayAdapter对象ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.item_array_adapter,data);//设置Adapter显示列表lv_main.setAdapter(adapter);}

二,ListView+SimpleAdapter

1.创建SimpleAdapter

SimpleAdapter(Context context,List<? extends Map<String,?>>data,int resource,String[] from,int[] to)

一共5个参数,前三个无需多说。

其中,from:map对象中的key的数组,用于得到对应的value。

to:Item布局文件中的子View的id的数组。

2.操作步骤

同上,只是Item布局要更复杂。

3.核心代码

1).ListView  同上

2).layout.item_simple_adapter

<ImageViewandroid:id="@+id/iv_item_icon"android:layout_width="100dp"android:layout_height="100dp"android:src="@drawable/ic_food1" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="100dp"android:orientation="vertical"android:gravity="center_vertical"android:layout_marginLeft="10dp"><TextViewandroid:id="@+id/tv_item_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="TextView" /><TextViewandroid:id="@+id/tv_item_content"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="TextView" /></LinearLayout>

3).Java

private ListView lv_main;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);lv_main = findViewById(R.id.lv_main);//准备集合数据List<Map<String,Object>> data = new ArrayList<Map<String,Object>>();Map<String,Object> map = new HashMap<String,Object>();map.put("icon",R.drawable.ic_food1);map.put("name","name----1");map.put("content","content----1");data.add(map);map = new HashMap<String,Object>();map.put("icon",R.drawable.ic_food2);map.put("name","name----2");map.put("content","content----2");data.add(map);map = new HashMap<String,Object>();map.put("icon",R.drawable.ic_food3);map.put("name","name----3");map.put("content","content----3");data.add(map);map = new HashMap<String,Object>();map.put("icon",R.drawable.ic_food4);map.put("name","name----4");map.put("content","content----4");data.add(map);map = new HashMap<String,Object>();map.put("icon",R.drawable.ic_food5);map.put("name","name----5");map.put("content","content----5");data.add(map);map = new HashMap<String,Object>();map.put("icon",R.drawable.ic_food6);map.put("name","name----6");map.put("content","content----6");data.add(map);map = new HashMap<String,Object>();map.put("icon",R.drawable.ic_food7);map.put("name","name----7");map.put("content","content----7");data.add(map);map = new HashMap<String,Object>();map.put("icon",R.drawable.ic_food8);map.put("name","name----8");map.put("content","content----8");data.add(map);map = new HashMap<String,Object>();map.put("icon",R.drawable.ic_food9);map.put("name","name----9");map.put("content","content----9");data.add(map);String[] from = {"icon","name","content"};int[] to = {R.id.iv_item_icon,R.id.tv_item_name,R.id.tv_item_content};//准备SimpleAdapter对象SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item_simple_adapter, from, to);//设置Adapter显示列表lv_main.setAdapter(adapter);}

三,ListView+BaseAdapter(最常用)

1.创建BaseAdapter

需要注意的是我们需要自定义一个Adapter类继承BaseAdapter,然后重写BaseAdapter的方法。

2.操作步骤

与前两个的大同小异,只要清楚基本步骤,具备图中四个元素即可。

3.核心代码

1)ListView同上两个。

2)Item布局同SimpleAdapter,因为要实现同样的ListView。

3)为了使用数据方便,ShopInfo封装类(get,set方法就不写了)

private int icon;private String name;private String content;public ShopInfo() {}public ShopInfo(int icon, String name, String content) {this.icon = icon;this.name = name;this.content = content;}

4).Java(这里自定义的Adapter类没有单独拿出来,读者可以单独创建一个类)

private ListView lv_main;private  List<ShopInfo> data;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);lv_main = findViewById(R.id.lv_main);//准备集合数据data = new ArrayList<ShopInfo>();data.add(new ShopInfo(R.drawable.ic_food1,"name----1","content----1"));data.add(new ShopInfo(R.drawable.ic_food2,"name----2","content----2"));data.add(new ShopInfo(R.drawable.ic_food3,"name----3","content----3"));data.add(new ShopInfo(R.drawable.ic_food4,"name----4","content----4"));data.add(new ShopInfo(R.drawable.ic_food5,"name----5","content----5"));data.add(new ShopInfo(R.drawable.ic_food6,"name----6","content----6"));data.add(new ShopInfo(R.drawable.ic_food7,"name----7","content----7"));data.add(new ShopInfo(R.drawable.ic_food8,"name----8","content----8"));data.add(new ShopInfo(R.drawable.ic_food9,"name----9","content----9"));data.add(new ShopInfo(R.drawable.ic_food10,"name----10","content----10"));//准备BaseAdapter对象MyAdapter adapter = new MyAdapter();//设置Adapter显示列表lv_main.setAdapter(adapter);}class MyAdapter extends BaseAdapter{//返回集合数据的数量@Overridepublic int getCount() {return data.size();}//返回指定下标对应的数据对象@Overridepublic Object getItem(int i) {return data.get(i);}@Overridepublic long getItemId(int i) {return 0;}/*** 返回指定下标所对应的item的View对象* i:下标* view:* viewGroup:ListView对象*/@Overridepublic View getView(int i, View view, ViewGroup viewGroup) {//加载item的布局,得到View对象View v = View.inflate(MainActivity.this, R.layout.item_base_adapter, null);//根据position(即i)设置对应的数据//得到当前行的视图对象ShopInfo shopInfo = data.get(i);//得到子View对象ImageView imageView = v.findViewById(R.id.iv_item_icon);TextView nameTV = v.findViewById(R.id.tv_item_name);TextView contentTV = v.findViewById(R.id.tv_item_content);//设置数据imageView.setImageResource(shopInfo.getIcon());nameTV.setText(shopInfo.getName());contentTV.setText(shopInfo.getContent());return v;}}

总结:以上仅为自己的学习笔记,有问题或错误恳请谅解指正,谢谢!


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

相关文章

ListView使用方法

ListView使用方法总结 - 直接使用ListView组件创建列表 - 通过Activity继承ListActivity创建 - 定制ListView界面 直接使用ListView组件创建列表 通过数组资源文件指定列表项 先在XML布局文件中添加ListView标志&#xff0c;设置好相关属性&#xff1b;在values下创建数组资…

Android—— ListView 的简单用法及定制ListView界面

一、ListView的简单用法 2. 训练目标 1) 掌握 ListView 控件的使用 2) 掌握 Adapter 桥梁的作用 实现步骤&#xff1a; 1&#xff09;首先新建一个项目&#xff0c; 并让ADT 自动帮我们创建好活动。然后修改activity_main.xml 中的代码&#xff0c;如下所示&#xff1a; &…

QT listView学习

文章目录 listViewdemo说明demo演示model定义委托 QStyledItemDelegate总结 listView listView 对比 tableView 、 treeView来说&#xff0c;最大的不同就是数据结构的不同。treeView是像树一样的层次结构&#xff0c;而listView则就是像链表一样的结构 跟之前的treeView&…

还在用ListView?

还在用Lisview&#xff1f;RecyclerView都已经出来一年多了&#xff01; 想必大家多或多或少的接触过或者了解过RecyclerView&#xff0c;为什么没有用起来&#xff0c;原因大概如下&#xff1f; ListView我用的挺好的&#xff0c;为什么要换RecyclerView&#xff1f;ListView…

ListView用法

ListView是用于显示数据的&#xff0c;先在窗体中拉一个lisview控件&#xff0c;还有一些新增、修改、删除、查询按钮和文本框&#xff0c;控件名称为listview,按钮为btnInsert,btnUpate,btnDeleteOne,btnDelete,btnSelect,文本框的名称为txtName,txtSex,txtPhone,txtAddress,设…

ListView的基础用法

最近学到ListView和RecyclerView&#xff0c;感觉有点难理解&#xff0c;于是自己找到了篇文章&#xff0c;感觉写的挺详细的&#xff08;文章链接在文末&#xff09;&#xff0c;然后自己再整理敲了跑了一遍&#xff0c;总结了一下&#xff0c;方便自己以后回头温习。 一个Li…

Android(14) ArrayAdapter(数组适配器)的三种方法

ArrayAdapter数组适配器用于绑定格式单一的数据&#xff0c;数据源可以是集合或者数组 列表视图(ListView)以垂直的形式列出需要显示的列表项。 实现过程&#xff1a;新建适配器->添加数据源到适配器->视图加载适配器 第一种&#xff1a;直接用ListView组件创建 列表…

Android——列表视图(ListView)

1、什么是ListView&#xff1f;它可以实现怎样的功能&#xff1f; 列表视图是android中最常用的一种视图组件&#xff0c;它以垂直列表的形式列出需要显示的列表项。手机屏幕空间有限&#xff0c;能显示的内容不多。可以借助ListView来显示更多、更丰富的内容。ListView允许用…

ListView详细介绍与使用

前言介绍&#xff1a; 关于 ListView 我们大家都应该是非常的熟悉了&#xff0c;在 Android 开发中是经常用到的&#xff0c;今天就再来回顾一下&#xff0c;ListView 的使用方法&#xff0c;和一些需要优化注意的地方&#xff0c;还有日常开发过程中的一些小技巧和经验。 Li…

Android最常用的控件ListView(详解)

一.ListView简介 在Android开发中&#xff0c;ListView是一个比较常用的控件。它以列表的形式 展示具体数据内容&#xff0c;并且能够根据数据的长度自适应屏幕显示。 二.ListView简单用法 代码部分 1.布局界面 activity_main.xml 代码&#xff1a; <?xml version"1…

ListView的用法

一、 ListView的使用 <ListView>:用于展示大量数据的一种列表视图,通过上下滑动的方式将屏幕外的数据滚动到屏幕内。 数据无法直接传递给ListView,需要适配器 Adapter:作用是将各种数据以合适的形式展示到View上 实例&#xff1a; Food.java: public class Food {priv…

Android原生AlertDialog修改标题,内容,按钮颜色,字体大小等

private void showAlerDialog() {AlertDialog dialog new AlertDialog.Builder(this).setTitle("AlerDialog").setMessage("这是一个AlertDialog").setPositiveButton("确定",null).setNegativeButton("取消",null).create();dialog.…

【android学习】Dialog对话框

1&#xff0c;Dialog 1&#xff09;onCreateDialog(int) 2&#xff09;showDialog(int) 第一次请求时&#xff0c;会从Activity中调用onCreateDialog。 3&#xff09;onPrepareDialog(int,Dialog) 在每次打开对话框时被调用。 4&#xff09;dismissDialog(int) 关闭对话…

Android Dialog使用详解

对话框是提示用户作出决定或输入额外信息的小窗口&#xff0c;通常不会填充整个屏幕&#xff0c;用于进行一些额外交互 Dialog 类是对话框的基类&#xff0c;但应该避免直接实例化 Dialog&#xff0c;而应使用其子类&#xff0c;比如 AlertDialog 此对话框可显示标题、提示信…

Android 修改AlertDialog原生setPositiveButton的字体颜色背景颜色大小边距位置

看效果图&#xff1a; public void lanyaClick(View v) {//点击确定之后转向登陆框LayoutInflater factory LayoutInflater.from(Beforestart.this);//得到自定义对话框final View DialogView factory.inflate(R.layout.item_alert_dialog, null);//创建对话框android.app.Al…

setPositiveButton和setNegativeButton的区别

setPositiveButton和setNegativeButton的区别和setNeutralButton的区别 三者都是AlertDialog弹出框的按钮&#xff0c;都是封装好的button&#xff0c;只是显示的位置不同&#xff0c;项目中可根据情况选择使用&#xff0c;setNegativeButton一般用于确认&#xff0c;setNegat…

GPS(rinex格式)数据解析详细解读

RINEX格式现如今已成为GPS测量应用中的标准数据格式&#xff0c;目前应用最为广泛、最普遍的是RINEX格式的第2个版本&#xff0c;该版本能够用于包括静态和动态GPS测量在内的不同观测模式数据。在该版本中定义了6种不同类型的数据文件&#xff0c;分别用于存放不同类型的数据&a…

2020/10/23 GPS的数据格式学习

GPS的数据格式学习 一、在使用GPS的通过串口向电脑发送数据的时候&#xff0c;要注意GPS数据线的连接&#xff1b; 1.1 VCC接VCC&#xff1b;&#xff08;VCC表示接电源正极&#xff09; 1.2 GND接GND&#xff1b;&#xff08;GND表示接地或接电源负极&#xff09; 1.3 TX接RX…

GPS数据包格式+数据解析

GPS数据包格式数据解析 一、全球时区的划分&#xff1a; 每个时区跨15经度。以0经线为界向东向西各划出7.5经度&#xff0c;作为0时区。即0时区的经度范围是7.5W——7.5E。从7.5E与7.5W分别向东、向西每15经度划分为一个时区&#xff0c;直到东11区和西11区。东11区最东部的经度…

GPS研究---GPS 数据格式

GPS 数据处理时所采用的观测数据是来自观测的 GPS 接收机。由于接收机的型号很多&#xff0c;厂商设计的数据格式各不相同&#xff0c;国际上为了能统一使用不同接收机的数据&#xff0c; 设计了一种与接收机无关的 RINEX(The Receiver Independent Exchange Format)格式&#…