自定义一个adapter
懒得写adapter,就自定义了一个,其实就是在new一个adapter的时候将getView方法也写了。
AdapterHelper
一个adapter的帮助类
代码如下:
import java.util.List;
import android.content.Context;
import android.util.SparseArray;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
public class AdapterHelper<T> {
private SparseArray<View> views;
private Context context;
private List<T> list;
private View v;
public Context getContext() {
return context;
}
public void setContext(Context context) {
this.context = context;
}
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
public View getV() {
return v;
}
public void setV(View v) {
this.v = v;
}
public AdapterHelper() {
super();
views = new SparseArray<View>();
}
public AdapterHelper(Context context, List<T> list, View v) {
super();
this.context = context;
this.list = list;
this.v = v;
views = new SparseArray<View>();
}
public void setTextViewText(int rid, CharSequence string) {
View view = views.get(rid);
if (view != null && view instanceof TextView) {
TextView tv = (TextView) view;
tv.setText(string);
} else {
views.put(rid, v.findViewById(rid));
}
}
public void setImageViewResource(int rid, int resid) {
View view = views.get(rid);
if (view != null && view instanceof ImageView) {
ImageView iv = (ImageView) view;
iv.setImageResource(resid);
} else {
views.put(rid, v.findViewById(rid));
}
}
public void setViewBackgroundResource(int rid, int resid) {
View view = views.get(rid);
if (view != null) {
view.setBackgroundResource(resid);
} else {
views.put(rid, v.findViewById(rid));
}
}
public View getViewById(int rid) {
View view = views.get(rid);
if (view == null) {
view = v.findViewById(rid);
}
return view;
}
}
CanBaseAdapter
此adapter就是我们要用的adapter
代码如下:
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
public abstract class CanBaseAdapter<T> extends BaseAdapter {
public Context context;
public List<T> list;
public AdapterHelper<T> helper;
public int rid;
public CanBaseAdapter(Context c, int rid,List<T> list) {
context = c;
this.list = list;
this.rid=rid;
helper = new AdapterHelper<T>(c, list, null);
}
public void clear() {
list = new ArrayList<T>();
notifyDataSetChanged();
}
public void addAll(List<T> data) {
if (list == null) {
list = new ArrayList<T>();
}
list.addAll(data);
notifyDataSetChanged();
}
public void refreshView(List<T> data) {
if (list == null) {
list = new ArrayList<T>();
}
list = data;
notifyDataSetChanged();
}
@Override
public int getCount() {
if (list == null) {
return 0;
}
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 v, ViewGroup parent) {
if (v==null) {
v = LayoutInflater.from(context).inflate(rid, null);
helper.setV(v);
}
initViewItem(helper, position,v);
return v;
}
protected abstract void initViewItem(AdapterHelper<T> helper, int position,View v);
}
使用方法
代码如下:
mAdapter = new CanBaseAdapter<Bean>(
this, R.layout.item_list, mDatas)
{
@Override
protected void initViewItem(AdapterHelper<Bean> helper,
final int position, View v) {
Bean item = helper.getList().get(position);
helper.setTextViewText(R.id.tv_title, item.getTitle());
helper.setTextViewText(R.id.tv_describe, item.getDesc());
helper.setTextViewText(R.id.tv_phone, item.getPhone());
helper.setTextViewText(R.id.tv_time, item.getTime());
v.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View paramView) {
switch (position) {
case 0:
System.out.println("one");
break;
case 1:
System.out.println("two");
break;
}
}
});
}
};
mListView.setAdapter(mAdapter);