Android学习笔记(10)——数据适配器ArrayAdapter和SimpleAdapter

上一篇文章我们介绍了关于ListView的基本知识,也说到了一些关于数据适配器Adapter的问题,这里我们继续介绍两种比较常见的数据适配器的类型,ArrayAdapter和SimpleAdapter。这两种适配器各自有各自的特点,适用于不同的情况。

ArrayAdapter

这种适配器比较简单,常用于仅仅是文本内容的ListView、没有图标或者比较复杂的布局的情况下,实现方法主要就是去填写构造函数中的参数,ArrayAdapter函数的构造方法有好几种,这里介绍了最主要的两种情况,具体可以看代码中的注释。

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

package
com.example.arrayadapter;

import
android.app.Activity;

import
android.os.Bundle;

import
android.widget.ArrayAdapter;

import
android.widget.ListView;

public
class
MainActivity
extends
Activity {

    private
String[] names = {"功能1","功能2","功能3","功能4","功能5","功能6"};

    private
ListView lv;

    @Override

    protected
void
onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        lv = (ListView) findViewById(R.id.lv);

        //方法1  3参数构造函数,要求加载的layout文件只能有一个TextView

        lv.setAdapter(new
ArrayAdapter<String>(this, R.layout.simple_textview, names));

        //方法2  4参数构造函数,加载一个普通layout文件,并指定TextView的id

        lv.setAdapter(new
ArrayAdapter<String>(this, R.layout.list_item, R.id.tv_item, names));

    }

}

MainActivity的xml文件很简单,就是一个LinearLayout加一个ListView,而simple_textview的xml文件如下:

?


1

2

3

4

5

6

7

8

<?xml
version="1.0"
encoding="utf-8"?>

<TextView
xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/simple_tv"

    android:layout_width="match_parent"

    android:layout_height="wrap_content"

    android:textSize="20sp">

</TextView>

list_item布局文件如下:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

<?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:orientation="vertical"
>

    <TextView

        android:id="@+id/tv_item"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:textSize="18sp"
/>

</LinearLayout>

两种方法其实差别不太大。

SimpleAdapter

这种数据适配器虽然名字叫simple,用起来却要比另外两种要麻烦一些,它支持界面布局更加复杂的Listview显示,比如要实现左边一个icon ,右边一个文字说明这种情况,用SimpleAdapter来实现就比较简单了。为了实际演示效果我们可以去sdk里面找一些drawable-icon出来,放到drawable-hdpi文件里面。这里我随便找了几个:

接下来我们来看一下关键的setAdapter一步怎么写,我们查看SimpleAdapter的函数介绍,发现这货构造函数有5个参数,分别是:

context 上下文,这个没什么好说的

data 官方解释是:A List of Maps. Each entry in the List corresponds to one row in the list. The Maps contain the data for each row, and should include all the entries specified in “from”简单的说就是一个List,每一个元素又是一个map集合,用来存放需要显示的数据对

resource 即数据要显示的布局文件的id

from 和 to  他们的功能是为了使data数据里面的key和布局文件中的id绑定起来,其中from里面是一个key的数组,而to 是一个int数组,表示布局文件中要显示key内容控件对应的R.id

这么一看,我们只需要细心的填写好这几个参数,API就会自动帮我们加载好界面了,我们来看看代码:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

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

package
com.example.simpleadapter;

import
java.util.ArrayList;

import
java.util.HashMap;

import
java.util.List;

import
java.util.Map;

import
android.app.Activity;

import
android.os.Bundle;

import
android.renderscript.Int2;

import
android.widget.ListView;

import
android.widget.SimpleAdapter;

public
class
MainActivity
extends
Activity {

    private
ListView lv;

    private
List<Map<String, Object>> data;

    @Override

    protected
void
onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        lv = (ListView) findViewById(R.id.lv);

        data =
new
ArrayList<Map<String,Object>>();

        

        Map<String,Object> map1 =
new
HashMap<String, Object>();

        map1.put("nametext",
"我是第一个文本");

        map1.put("icon", R.drawable.ic_menu_call); 

        

        Map<String,Object> map2 =
new
HashMap<String, Object>();

        map2.put("nametext",
"我是第二个文本");

        map2.put("icon", R.drawable.ic_menu_camera);   

        

        Map<String,Object> map3 =
new
HashMap<String, Object>();

        map3.put("nametext",
"我是第三个文本");

        map3.put("icon", R.drawable.ic_menu_chat_dashboard);

        

        data.add(map1);

        data.add(map2);

        data.add(map3);

        lv.setAdapter(new
SimpleAdapter(this, data, R.layout.view_item,
new
String[] {
"icon","nametext"},
new
int
[] {R.id.iv,R.id.tv}));

    }

}

其中view_item.xml里面是一个横向的ListView,有一个ImageView存放icon,以及一个TextView存放文字说明:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<?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:gravity="center_vertical"

    android:orientation="horizontal"
>

    <ImageView

        android:id="@+id/iv"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"
/>

    <TextView

        android:id="@+id/tv"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"
/>

</LinearLayout>

最后我们在模拟器上执行代码,得到最终效果,这样就比较美观了:

通过SimpleAdapter,我们就可以设计出各式各样自定义风格的ListView了。

欢迎转载,请注明出处。

搬运自本人博客,xge技术博客

http://www.xgezhang.com/android_listview_intro.html

时间: 2024-10-12 22:42:43

Android学习笔记(10)——数据适配器ArrayAdapter和SimpleAdapter的相关文章

无废话Android之listview入门,自定义的数据适配器、采用layoutInflater打气筒创建一个view对象、常用数据适配器ArrayAdapter、SimpleAdapter、使用ContentProvider(内容提供者)共享数据、短信的备份、插入一条记录到系统短信应用(3)

1.listview入门,自定义的数据适配器 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent&

Android学习之Adapter(数据适配器)

1.定义     数据适配器是AdapterView视图(如ListView - 列表视图控件.Gallery - 缩略图浏览器控件.GridView - 网格控件.Spinner - 下拉列表控件.AutoCompleteTextView - 自动提示文本框.ExpandableListView - 支持展开/收缩功能的列表控件等)与数据之间的桥梁,用来处理数据并将数据绑定到AdapterView上. 2.作用    数据适配器是连接数据源和视图界面的桥梁. 3.分类     包括ArrayA

Android 学习笔记之数据存储SharePreferenced+File

学习内容: Android的数据存储.... 1.使用SharedPreferences来保存和读取数据... 2.使用File中的I/O来完成对数据的存储和读取...   一个应用程序,经常需要与用户之间形成交互...需要保存用户的设置和用户的数据信息...这些都离不开数据的存储...Android的数据采用五种方式来进行存储...在这里就先介绍两种存储方式... 1.使用SharedPreferences存储数据...   对于软件配置参数的保存,Windows系统采用ini文件来进行保存,

Android学习笔记之数据的共享存储SharedPreferences

(1)布局文件,一个简单的登录文件; <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"

Android学习笔记之数据的Sdcard存储方法及操作sdcard的工具类

FileService.java也就是操作sdcard的工具类: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75

Android学习笔记之数据的内部存储方式实习数据的读写

(1)目录结构 (2) 布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"

Android学习笔记-保存数据的实现方法1

Android开发中,有时候我们需要对信息进行保存,那么今天就来介绍一下,保存文件到内存,以及SD卡的一些操作,及方法,供参考. 第一种,保存数据到内存中: //java开发中的保存数据的方式 public static boolean saveUserInfo(String username,String password){ File file = new File("/data/data/com.ftf.login/info.txt"); try { FileOutputStre

Android:日常学习笔记(10)———使用LitePal操作数据库

Android:日常学习笔记(10)---使用LitePal操作数据库 引入LitePal 什么是LitePal LitePal是一款开源的Android数据库框架,采用了对象关系映射(ORM)的模式,将平时开发时最常用的一些数据库功能进行了封装,使得开发者不用编写一行SQL语句就可以完成各种建表.増删改查的操作.并且LitePal很"轻",jar包大小不到100k,而且近乎零配置,这一点和Hibernate这类的框架有很大区别.目前LitePal的源码已经托管到了GitHub上. 关

Android开发学习笔记:数据存取之SQLite浅析

一.SQLite的介绍 1.SQLite简介 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入 式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持 Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl.PHP.Java.C++..Net等,还有ODBC接口,同样比起 Mysql.PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的