您的位置:首页 > 移动开发 > Android开发

Android SimpleAdapter 的详解和使用

2015-11-13 16:39 591 查看
看其他代码看的我脑袋疼,还是转身来研究研究Android的东西吧,换换脑子。

这次就来研究研究SimpleAdapter吧,还是老规矩,先从API说起吧。

类的介绍:

public class SimpleAdapter extends BaseAdapter implements Filterable {}

这是一个简单的适配器,可以将静态数据映射到XML文件中定义好的视图。你可以指定数据支持的列表如ArrayList组成的Map。在ArrayList中的每个条目对应List中的一行。Maps包含每行数据。你可以指定一个定义了被用于显示行的视图XML文件,通过关键字映射到指定的视图。绑定数据到视图分两个阶段,首先,如果一个SimpleAdapter.ViewBinder是有效的,setViewValue(android.view.View,
Object, String)将被调用。如果返回值是真,绑定完成了。如果返回值为假,下面的视图将按以下顺序去处理:
l一个实现了Checkable的视图(例如CheckBox),期望绑定值是一个布尔类型。
lTextView期望绑定值是一个字符串类型,通过调用setViewText(TextView,
String)绑定。
lImageView期望绑定值是一个资源id或者一个字符串,通过调用setViewImage(ImageView,
int) 或setViewImage(ImageView, String)。
如果没有一个合适的绑定发生将会抛出IllegalStateException。

构造函数:
public SimpleAdapter(Context context, List<? extends Map<String, ?>> data,

int resource, String[] from, int[] to) {

mData = data;

mResource = mDropDownResource = resource;

mFrom = from;

mTo = to;

mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}


参数

context 关联SimpleAdapter运行着的视图的上下文。

data 一个Map的列表。在列表中的每个条目对应列表中的一行,应该包含所有在from中指定的条目

resource 一个定义列表项目的视图布局的资唯一标识。布局文件将至少应包含哪些在to中定义了的名称。

from 一个将被添加到Map上关联每一个项目的列名称的列表

to 应该在参数from显示列的视图。这些应该全是TextView。在列表中最初的N视图是从参数from中最初的N列获取的值。

方法:继承了BaseAdapter可调用所有Baseadapter的方法,不懂得同学可以看我之前写的关于Baseadapter的使用。下面列举一些BaseAdapter不存在的方法。

public
SimpleAdapter.ViewBinder getViewBinder()
返回被用来绑定数据到视图的
SimpleAdapter.ViewBinder


返回值

一个ViewBinder
,如果binder不存在则返回null

参见

setViewBinder(android.widget.SimpleAdapter.ViewBinder)


public void setViewBinder(SimpleAdapter.ViewBinder
viewBinder)
设置binder用于绑定数据到视图

参数

viewBinder 用于绑定数据到视图的binder可以设置为null,可用于删除存在的binder

参见

getViewBinder()


public void setViewImage(ImageView
v, int value)
调用bindView去给ImageView设置图像,但只有当ViewBinder不存在或者如果存在的ViewBinder无法处理绑定到一个ImageView时才调用。如果提供的数据是一个整形时,setViewImage(ImageView,
String)方法将被本方法替代

参数

v 接收图像的ImageView

value 从数据集获取数据到值

参见

setViewImage(ImageView, String)


public void setViewImage(ImageView
v,
String value)
调用bindView去给ImageView设置图像,但只有当ViewBinder不存在或者如果存在的ViewBinder无法处理绑定到一个ImageView时才调用。默认的,这个值被作为一个图像资源来对待。如果这个值作为一个图像的Uri来使用。如果提供的数据不是一个整形时,setViewImage(ImageView,
int)方法将被本方法替代

参数

v 接收图像的ImageView

value 从数据集获取数据到值

参见

setViewImage(ImageView, int)


public void setViewText(TextView
v,
String text)
调用bindView去给TextView设置文本,但只有当ViewBinder不存在或者如果存在的ViewBinder无法处理绑定到一个TextView时才调用

参数

v 将接收文本的TextView

text 被设置到TextView的文本

好了,文档就介绍到这里,下面开始实例吧。

主布局文件:

<ListView
android:id="@+id/lvcsdn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/spinner1"
>
</ListView>
listview item 布局文件:
<?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/tvcslayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="SimpleAdapter测试"
android:textSize="18sp" />

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="测试" />

<ImageView
android:id="@+id/ivsimple"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />

</LinearLayout>


接下来是测试的activity
public class SimpleAdapterActivity extends Activity{
private String[] names={"张三","李四","王五","赵六"};
private int[] imageids={R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView lv=(ListView) findViewById(R.id.lvcsdn);
List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
for(int i=0;i<names.length;i++){
Map<String,Object> map=new HashMap<String, Object>();
map.put("name", names[i]);
map.put("image", imageids[i]);
list.add(map);
}
SimpleAdapter adapter=new SimpleAdapter(this, list, R.layout.csarrayada, new String[]{"name","image"},new int[]{R.id.tvcslayout,R.id.ivsimple} );
lv.setAdapter(adapter);
}
}


无图无真相,接下来上一下测试的实图:


至此,SimpleAdapter 的简单使用就完成了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: