•SimpleAdapter简介

  simpleAdapter 的扩展性最好,可以定义各种各样的布局出来;

  可以放上ImageView(图片),还可以放上Button(按钮),CheckBox(复选框)等等。

准备工作

  新建一个项目,选择 Empty Activity 选项;

  Android Studio 会自动为我们生成两个文件 MainActivity.java 和 activity_main.xml;

activity_main.xml

<?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"
android:padding="10dp"> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Test Simple Adapter"
android:textSize="20sp"
/> <!-- 为 ListView 设置红色的分割线
并将分割线宽度设置为 2dp -->
<ListView
android:id="@+id/lv_simple_adapter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:divider="@color/red"
android:dividerHeight="2dp"
/>
</LinearLayout>

  在 res/layout 新建一个 simple_adapter_item.xml 文件;

simple_adapter_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:padding="10dp"
android:orientation="horizontal"> <ImageView
android:id="@+id/header"
android:layout_width="100dp"
android:layout_height="160dp"
android:scaleType="centerCrop"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="160dp"
android:orientation="vertical"
android:layout_marginLeft="10dp"> <TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:gravity="left"/>
<TextView
android:id="@+id/desc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="13sp"
android:textColor="@color/gray"
android:gravity="left"/>
</LinearLayout>
</LinearLayout>

页面布局说明

  1. 整体采用线性布局,并以水平排列。
  2. 左边第一项定义一个ImageView组件,用来显示图片。
  3. 右边嵌套一个线性布局,并以垂直排列。
  4. 嵌套的线性布局里面定义了两个TextView,一个显示名字,一个显示介绍。

  simple_adapter_item布局示意图如下:

    

  最后,修改 MainActivity.java 中的代码;

MainActivity.java

public class SimpleAdapterActivity extends AppCompatActivity {

    private ListView listview;
private String[] name = new String[]{"关羽","孙尚香","娜可露露"};
private String[] desc = new String[]{
"暴风雪的远征者,冰凌北地的灾厄之王!\n"+"为我们的永生而战,为我们的不朽而战!\n"+"奉上领地,或者化为冻腐的尘埃!",
"大小姐驾到,通通闪开!\n"+"来发子弹吗?满足你!\n"+"你,也是本小姐的粉丝吗?",
"啊里噶多,玛玛哈哈\n"+"萨,特几那赛\n"+"一待!玛玛哈哈"
};
private int[] head = new int[]{
R.drawable.guan_yu,
R.drawable.sun_shang_xiang,
R.drawable.na_ke_lu_lu
}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simple_adapter_main);
SimpleAdapter adapter = new SimpleAdapter(this,getData(),R.layout.simple_adapter_item,new String[]{"name","desc","header"},new int[]{
R.id.name,R.id.desc,R.id.header
}); listview = findViewById(R.id.lv_simple_adapter);
listview.setAdapter(adapter);
} private List<Map<String,Object>> getData(){ List<Map<String,Object>> list = new ArrayList<>(); for(int i = 0;i < name.length;i++){
Map<String,Object> map = new HashMap<>();
map.put("name",name[i]);
map.put("desc",desc[i]);
map.put("header",head[i]);
list.add(map);
}
return list;
}
}

说明

  1. 定义了一个 String 数组 name,用来定义名称。
  2. 定义了一个 String 数组 desc,用来定义介绍。
  3. 准备几张图片,拷贝到 drawable 文件夹(网上随便找几张就行),然后定义一个 int 数组,把图片 ID 加进来。
  4. 定义一个  List<Map<String,Object>>getData()  方法,用来获取列表项。
  5. 创建一个 SimpleAdapter 对象。
  6. 设置 ListView 的 Adapter 为刚创建的 simpleAdapter。

  使用 simpleAdapter 的数据项一般都是 HashMap 构成的 List,List 的每一节对应 ListView 的每一行。

  HashMap 的每个键值数据映射到布局文件中对应id的组件上。

  因为系统没有对应的布局文件可用,所以需要我们自己定义一个布局 simple_adapter_item.xml。

SimpleAdapter中参数所表达的意思

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

  • Context context  : 表示上下文对象,就是要展示 ListView 的 Activity,或者是通过 getApplicationContext() 得到的上下文对象
  • List<? extends Map<String,?>>data  : 用于在列表中显示的数据,传入的数据必须是  List<? extends Map<String,?>>  的实现类
    • 比如 List<Map<String,Object>>
  • int resource  : ListView 中显示的每行子 View 的资源文件,就是位于 layout 文件夹中的 .xml 布局文件
  • String[] from  : 表示 Map<String,Object> 中存放的 Key 键值,因为它要通过键值才能找到对应的 Value,也就是布局要显示的内容
  • int[] to  : 表示要显示出来的 resource 布局文件的 R.id.xx 值,它和 from 中的数据源选项要一一对应

•运行效果

  

Android 之 SimpleAdapter 学习笔记的更多相关文章

  1. Android安装器学习笔记(一)

    Android安装器学习笔记(一) 一.Android应用的四种安装方式: 1.通过系统应用PackageInstaller.apk进行安装,安装过程中会让用户确认 2.系统程序安装:在开机的时候自动 ...

  2. android cocos2d-x for Android安装和学习笔记(请用adt-bundle21.1或以上导入)

    引用:http://weimingtom.iteye.com/blog/1483566 (20121108)注意:这篇文章用cdt编译ndk工程的内容已过时(现在可以用adt-bundle,避免配置繁 ...

  3. Android API Guides 学习笔记---Application Fundamentals(一)

    今天开始学习google官网上的API guides ,主要读了Application Fundamentals这一章节,此章节介绍了一个App的基本组成,共包括四大部分内容. 1.      App ...

  4. Android应用开发学习笔记之事件处理

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android提供的事件处理机制分为两类:一是基于监听的事件处理:二是基于回调的事件处理.对于基于监听的事件处理,主 ...

  5. Android Socket编程学习笔记

    http://blog.csdn.net/eyu8874521/article/details/8847173 度娘给出的描述:通常也称作"套接字",用于描述IP地址和端口,是一个 ...

  6. Android应用开发学习笔记之AsyncTask

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 在上一篇文章中我们学习了多线程和Handler消息处理机制,如果有计算量比较大的任务,可以创建一个新线程执行计算工作 ...

  7. Android应用开发学习笔记之播放音频

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android支持常用音视频格式文件的播放,本文我们来学习怎样开发Android应用程序对音视频进行操作. Andr ...

  8. android移动开发学习笔记(二)神奇的Web API

    本次分两个大方向去讲解Web Api,1.如何实现Web Api?2.如何Android端如何调用Web Api?对于Web Api是什么?有什么优缺点?为什么用WebApi而不用Webservice ...

  9. [Android游戏开发学习笔记]View和SurfaceView

    本文为阅读http://blog.csdn.net/xiaominghimi/article/details/6089594的笔记. 在Android游戏中充当主要角色的,除了控制类就是显示类.而在A ...

随机推荐

  1. React Hooks: useMemo All In One

    React Hooks: useMemo All In One useMemo https://reactjs.org/docs/hooks-reference.html#usememo refs x ...

  2. fetch & form-data & upload & image file

    fetch & form-data & upload & image file no need multipart/form-data https://blog.xinshan ...

  3. 听说USDN最近很火,它究竟是什么?

    最近USDN在各大社区沸沸扬扬,甚至很多人都说USDN将会打破稳定币市场的格局,那么USDN究竟是怎样的一种稳定币呢?小编今天就帮助大家了解一下,新一代算法型稳定币USDN. USDN是基于公链NGK ...

  4. Captain Technology INC浅谈新能源汽车的未来

    近日全世界上最大的资管公司贝莱德向位于的英国电动汽车初创公司Arrival投资1.18亿美元,且该公司已有投资者亚马逊和美国第二大汽车制造商福特汽车参投.中国最知名的电动车公司蔚来股价单日大涨22%, ...

  5. [转]Ubuntu16.04安装搜狗输入法

    原文地址:https://blog.csdn.net/u013894834/article/details/60357071,转载主要方便随时查阅,如有版权要求,请及时联系. 1.首先我们先去搜狗输入 ...

  6. 力扣1438. 绝对差不超过限制的最长连续子数组-C语言实现-中等难度

    题目 传送门 文本 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条 ...

  7. css中的transform,transition,translate的关系

    transform 旋转(transform是没有动画效果,你改变了它的值,元素的样子就唰的改变了.其中的位移的函数名就叫translate,所以说,translate是transform的一部分.) ...

  8. 开工大吉:TcaplusDB将持续为您提供可靠的数据服务

    开工大吉 新的一年 新的开始 我们也带着新的心意 向您奔赴而来    在此,TcaplusDB祝广大客户朋友,开工大吉,2021,我们将一如既往地守护您的数据,继续做您最坚实的后盾.    作为专为游 ...

  9. MySQL 事务的隔离级别

    转载:https://developer.aliyun.com/article/743691?accounttraceid=80d4fddb3dc64b97a71118659e106221tozz 简 ...

  10. 使用Docker创建MongoDb服务

    使用Docker创建MongoDb服务 1.先拉mongodb镜像 docker pull mongodb:4.2.5 2.创建映射目录 创建mongo映射目录,用于存放后面的相关东西. mkdir ...