总觉得在这几个adapter里面,BaseAdapter是最重要的,因为他可以适应所有的模式
1.写一个类继承BaseAdapter
重写里面的方法,其中 getCount() 和getView(int arg0, View arg1, ViewGroup arg2)必须重写:
public int getCount() {
return 0;
//必须重写,不能返回0.否则没有数据
}
public Object getItem(int arg0) {
return null;
}
public long getItemId(int arg0) {
return 0;
}
public View getView(int arg0, View arg1, ViewGroup arg2) {
return null;
}
2.声明视图容器
LayoutInflater inflater=null;
视图容器是在构造方法里通过inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);创建的。
在getview里通过convertView=inflater.inflate(R.layout.girdview, null);获取list_item布局文件的视图 。
这里有两个视图,一个是包含listview控件的主视图,另一个是list_item显示的方式。
下面是例子:
package com.example.list;
import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class ListViewActivity extends Activity {
//声明ListView
ListView listView;
//声明 MyAdapter
MyAdapter adapter;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); //显示主视图
setContentView(R.layout.listviewlayout);
//初始化listView
listview=(ListView)findViewById(R.id.cities_listView);
//获取数据
ArrayList<HashMap<String,Object>> list=getData();
//初始化adapter(调用的构造方法)
adapter=new MyAdapter(list);
//将适配器设置到listview
listview.setAdapter(adapter);
}
//获取数据的方法
private ArrayList<HashMap<String, Object>> getData() {
ArrayList<HashMap<String, Object>> list=new ArrayList<HashMap<String,Object>>();
for(int i=0;i<10;i++){
HashMap<String, Object> map=new HashMap<String, Object>();
map.put("personImage", R.drawable.ic_launcher);
map.put("personName", "刘关星");
map.put("personCode", "123");
list.add(map);
}
return list;
}
//建立一个新类继承BaseAdapter
class MyAdapter extends BaseAdapter{
private ArrayList<HashMap<String,Object>> list;
//视图容器
private LayoutInflater inflater;
//构造方法
public MyAdapter(ArrayList<HashMap<String,Object>> list){
this.list=list;
//得到inflater第一种方法
this.inflater=getLayoutInflater();
//得到inflater第二种方法
inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
//必须重写,默认返回的是0
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
HashMap<String, Object> person_map=list.get(position);
ViewHolder holder=null;
if(convertView==null){
//这里将list_item的视图通过inflater得到并给了converview
convertView=inflater.inflate(R.layout.list_item,null);
holder=new ViewHolder();
//找到id
holder.image=(ImageView) convertView.findViewById(R.id.person_image);
holder.name_text=(TextView) convertView.findViewById(R.id.person_name);
holder.code_text=(TextView) convertView.findViewById(R.id.person_code);
holder.persondelete_btn=(Button) convertView.findViewById(R.id.pesondelete_btn);
convertView.setTag(holder);
}else{
//直接得到下一个控件集
holder=(ViewHolder) convertView.getTag();
}
//赋值
holder.image.setImageResource((Integer)person_map.get("personImage"));
holder.name_text.setText((String)person_map.get("personName"));
holder.code_text.setText((String)person_map.get("personCode"));
holder.persondelete_btn.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
System.out.println("++");
}
});
return convertView;
}
}
//自定义的ViewHolder
static class ViewHolder{
ImageView image;
TextView name_text;
TextView code_text;
Button persondelete_btn;
}
}