基本每个项目中都要用到ListView、GridView, 而如果直接使用BaseAdapter,代码量会非常多,所以写了一个封装的Adapter,大大的节省代码量
代码中已经加了注释,这里直接贴出代码:
public abstract class ListItemAdapter<T> extends BaseAdapter {
protected Context context;
protected List<T> myList;
public ListItemAdapter(Context context) {
this.context = context;
}
/**
* 得到适配器所有数据
*
* @return
*/
public List<T> getList() {
return myList;
}
/**
* 为适配器刷新数据。并且重新唤醒适配器
*
* @param list
*/
public void setList(List<T> list) {
this.myList = list;
notifyDataSetChanged();
}
/**
* 为适配器添加一个List<T>的全部数据。并且重新唤醒适配器
*
* @param list
*/
public void addList(List<T> list) {
if (myList == null) {
myList = new ArrayList<T>();
}
myList.addAll(list);// 此方法是将传进来的List<T>全部数据条目添加到myList<T>中
notifyDataSetChanged();
}
/**
* 为适配器添加一个泛型条目T
*
* @param t
*/
public void addItem(T t) {
if (myList == null) {
myList = new ArrayList<T>();
}
myList.add(t);
notifyDataSetChanged();
}
/**
* 为适配器删除一个泛型条目T
*
* @param t
*/
public void deleteItem(int position) {
if (myList != null) {
myList.remove(position);
notifyDataSetChanged();
} else {
// 删除失败 适配器为空
}
}
/**
* 为适配器添加一个泛型条目T
*
* @param t
*/
public void changeItem(T t, int index) {
if (myList == null) {
myList = new ArrayList<T>();
}
myList.set(index, t);
notifyDataSetChanged();
}
/**
* 判断适配器数据是否为空
*
* @return
*/
public Boolean isNull() {
return myList == null || myList.size() == 0;
}
@Override
public int getCount() {
return null == myList ? 0 : myList.size();
}
@Override
public Object getItem(int position) {
return myList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public abstract View getView(int position, View convertView,
ViewGroup parent);
}
使用的时候也是非常方便:
1.初始化ListView
ListView listView = (ListView) findViewById(R.id.lv);
2.初始化适配器
MyAdapter adapter = new MyAdapter(this);
3.绑定适配器
listView.setAdapter(adapter);
4.给适配器设置数据
adapter.setList(list);
然后MyAdapter只需要继承自定义的Adapter:
class MyAdapter extends ListItemAdapter<String>{
public Test(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
return null;
}
}
附完整Demo:
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
private ListView listView;
private MyAdapter adapter;
private List<Bean> list = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.lv);// 初始化ListView
adapter = new MyAdapter(this);
listView.setAdapter(adapter);// 绑定适配器
list = new ArrayList<Bean>();
for (int i = 0; i < 30; i++) {
Bean bean = new Bean();
bean.setName("是道德的沦丧还是人性的泯灭");
list.add(bean);
}
adapter.setList(list);// 给Adapter设置数据
}
class MyAdapter extends ListItemAdapter<Bean> {
public MyAdapter(Context context) {
super(context);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Holder holder = null;
if (convertView == null) {
holder = new Holder();
convertView = View.inflate(context, R.layout.item, null);
holder.tv = (TextView) convertView.findViewById(R.id.tv);
convertView.setTag(holder);
} else {
holder = (Holder) convertView.getTag();
}
final Bean bean = myList.get(position);
holder.tv.setText(bean.getName());
return convertView;
}
class Holder {
TextView tv;
}
}
class Bean {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
最后再补充一下,如果需要做分页,第一页的数据直接adapter.setList(lsit); 第二页以后的数据直接adapter.addList(list);
下载地址:http://download.csdn.net/detail/qq_18612815/9518827