基本每個項目中都要用到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