Android SimpleAdapter 的详解和使用

看其他代码看的我脑袋疼,还是转身来研究研究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 的简单使用就完成了。








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章