http://blog.sina.com.cn/s/blog_4b3c1f950100qzro.html
首先,来看一下Adapter的体系结构:
下面,分别讲一下它的几个常见的子类:
ListAdapter接口:
BaseAdapter抽象类:
ArrayAdapter类:
SimpleAdapter类:
如果没有合适的绑定被发现,一个IllegalStateException被抛出。
下面,是一个 SimpleAdapter 的例子:
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/MyListView">
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget0"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
android:id="@+id/ItemImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
android:id="@+id/ItemTitle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="TextView"
android:layout_x="50px"
android:textSize="15pt">
android:id="@+id/ItemText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="TextView"
android:layout_x="50px"
android:layout_y="40px">
android:id="@+id/ItemCheck"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_x="270px">
public class TestUIList extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ListView list = (ListView) findViewById(R.id.MyListView);
ArrayList> lstImageItem = newArrayList>();
String[] str1 = { "row one", "row two", "row three", "row four"};
String[] str2 = { "第一行", "第二行", "第三行", "第四行" };
for (int i = 0; i < str1.length; i++) {
HashMap map = new HashMap();
map.put("ItemImage", R.drawable.icon);
map.put("ItemTitle", str1[i]);
map.put("ItemText", str2[i]);
lstImageItem.add(map);
}
SimpleAdapter saImageItems = new SimpleAdapter(this,
lstImageItem,
R.layout.simple_list_item_2,
new String[] { "ItemImage", "ItemTitle", "ItemText" },
new int[] { R.id.ItemImage, R.id.ItemTitle, R.id.ItemText});
list.setAdapter(saImageItems);
}
}
下面,仅讨论一下Screen Layout:
注意,最后一定要调用setListAdapter(adapter)方法来把通过Adapter绑定了数据的这个List显示出来。setListAdapter方法间接调用了Adapter的getView方法,其作用是返回你想要的view类型。而且当点击listView里的item时,会根据getView重画这个ListView。例子可参见《AndroidSDK开发大全》中的“资源管理器“的例子。
最后我们给出自己些的MyAdapter配合ListActivity实现监听事件的例子:
package com.li.android.myhome;
import java.util.ArrayList;
import java.util.List;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
public class MyHome extends ListActivity
{
private List items = null;
protected void onCreate(Bundle icicle)
{
super.onCreate(icicle);
setContentView(R.layout.main);
items = new ArrayList();
String[] titles =
{ "默认主题", "主题-A", "主题-B", "中秋佳节", "粉红女郎", "花样年华" };
for (int i = 0; i < titles.length; i++)
{
String title = titles[i];
items.add(title);
}
setListAdapter(new MyAdapter(this, items));
}
@Override
protected void onListItemClick(ListView l, View v, intposition,
long id)
{
new AlertDialog.Builder(MyHome.this).setItems(
R.array.items_my_dialog, newDialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, intwhichcountry)
{
}
})
.show();
}
}
package com.li.android.myhome;
import java.util.List;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class MyAdapter extends BaseAdapter
{
private LayoutInflater mInflater;
private Bitmap icom_theme;
private Bitmap icon_selected32;
private List items;
public MyAdapter(Context context, List it)
{
mInflater = LayoutInflater.from(context);
items = it;
icom_theme =BitmapFactory.decodeResource(context.getResources(),
R.drawable.theme);
icon_selected32 = BitmapFactory.decodeResource(context
.getResources(), R.drawable.selected32);
}
public int getCount()
{
return items.size();
}
public Object getItem(int position)
{
return items.get(position);
}
public long getItemId(int position)
{
return position;
}
public View getView(int position, View convertView, ViewGroupparent)
{
ViewHolder holder;
convertView = mInflater.inflate(R.layout.file_row, null);
holder = new ViewHolder();
holder.text = (TextView)convertView.findViewById(R.id.text);
holder.mTheme = (ImageView)convertView.findViewById(R.id.theme);
holder.mSelected32 = (ImageView) convertView
.findViewById(R.id.selected32);
holder.mTheme.setImageBitmap(icom_theme);
String title = items.get(position);
holder.text.setText(title);
holder.mSelected32.setImageBitmap(icon_selected32);
return convertView;
}
private class ViewHolder
{
TextView text;
ImageView mTheme;
ImageView mSelected32;
}
}
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget0"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_x="50px"
android:textSize="15pt">
android:id="@+id/selected32"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_x="270px">