BaseAdapter就Android应用程序中经常用到的基础数据适配器,它的主要用途是将一组数据传到像ListView、Spinner、Gallery及GridView等UI显示组件,它是继承自接口类Adapter.
例子:自定义列表适配器
MyListAdapter.java代码
package com.example.baseadapter;
import java.util.List;
import java.util.Map;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
public class MyListAdapter extends BaseAdapter {
private LayoutInflater inflater = null;
private Context context = null;
private List> listdata = null;
/*
* 一行元素
*/
public final class ListItem {
public ImageView icon;
public TextView name;
public Button but;
}
public MyListAdapter(Context ui, List> listdata) {
this.context = ui;
this.inflater = LayoutInflater.from(this.context);
this.listdata = listdata;
}
@Override
public int getCount() {
return listdata.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
/*
* 这是渲染的重点,包括行内的点击事件也需要在这里定义
*/
@Override
public View getView(int position, View v, ViewGroup parent) {
// 初始化一行元素,这里也有部分优化
ListItem listitem = null;
if (v == null) {
v = inflater.inflate(R.layout.listitem, null);
listitem = new ListItem();
listitem.icon = (ImageView) v
.findViewById(R.id.image);
listitem.name = (TextView) v
.findViewById(R.id.text);
listitem.but = (Button) v
.findViewById(R.id.button);
v.setTag(listitem);
} else {
listitem = (ListItem) v.getTag();
}
// 填充数据
listitem.name.setText(listdata.get(position).get("name").toString());
listitem.but.setText(listdata.get(position).get("but").toString());
listitem.icon.setImageResource(Integer.parseInt(listdata.get(position).get("icon").toString()));
return v;
}
}
BaseActivity.java代码
package com.example.baseadapter;
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.widget.ListView;
public class BaseActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.baseactivity);
ListView lv = (ListView) findViewById(R.id.listview1);
List> list = new ArrayList>();
for (int i = 0; i < 5; i++) {
Map m = new HashMap();
m.put("name", "Text" + i);
m.put("icon", R.drawable.f001);
m.put("but", "Button" + i);
list.add(m);
}
MyListAdapter adapter = new MyListAdapter(
this,//listview的运行环境界面上下文
list
);
lv.setAdapter(adapter);
}
}
baseactivity.xml代码
listitem.xml代码