•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. cookie all in one

    cookie all in one credentials: "include" https://developers.google.com/web/updates/2015/03 ...

  2. STAR 法则

    STAR 法则 STAR: Situation, Task, Action, Result 一. 什么是 STAR 法则? STAR法则是情境(situation).任务(task).行动(actio ...

  3. SVG namespace & preview bug

    SVG namespace & preview bug error This XML file does not appear to have any style information as ...

  4. nasm astricmp函数 x86

    xxx.asm: %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export as ...

  5. 「NGK每日快讯」2021.2.2日NGK公链第91期官方快讯!

  6. JS数字每三位加逗号的最简单方法

    <script> function thousands(num){ var str = num.toString(); var reg = str.indexOf("." ...

  7. Django Admin 删除文件同时删除资源文件(delete_upload_files)

    一  使用环境 开发系统: windows IDE: pycharm 数据库: msyql,navicat 编程语言: python3.7  (Windows x86-64 executable in ...

  8. svn报错Previous operation has not finished; run 'cleanup' if it was interrupted

  9. yum安装MySQL8 - Centos8

    官方地址:https://dev.mysql.com/doc/refman/8.0/en/linux-installation-yum-repo.html 参考博客地址:https://www.jia ...

  10. docker ssh秘钥免密登录

    一.概述 有一台跳板机,已经实现了免密登录后端服务器.但是我写了一个django项目,它是运行在容器中的,也需要免密登录后端服务器. 虽然可以在容器中手动做一下免密登录,但是容器重启之后,之前做的设置 ...