首页 > 其他 > 详细

编写自己的Adapter模板

时间:2015-03-07 02:14:22      阅读:336      评论:0      收藏:0      [点我收藏+]

如果你项目一直用系统给你封装的BaseAdapter的话,那么我只想说,你不累么?
代码繁多还要写数据缓存,还不如自己动手写一个模板吧,这样后面项目就可以直接套用了,编写和执行效率大大提升啊。
BaseAdapter.java

001 import java.util.ArrayList;
002 import java.util.Collection;
003 import java.util.Collections;
004 import java.util.Comparator;
005 import java.util.List;
006 ?
007 import android.content.Context;
008 import android.content.res.Resources;
009 import android.view.LayoutInflater;
010 import android.view.View;
011 import android.view.ViewGroup;
012 ?
013 ?
014 /**
015 ?* 实现这个适配器模板会少很多代码
016 ?* @author leehom
017 ?* @param <T>
018 ?*/
019 public abstract class BaseAdapter<T> extends android.widget.BaseAdapter {
020 ?
021 ????protected List<T> list;
022 ????protected Context context;
023 ????protected LayoutInflater inflater;
024 ????private int layoutID;
025 ?
026 ????public BaseAdapter(Context context, T[] ts, int layoutID) {
027 ????????super();
028 ????????this.context = context;
029 ????????this.list = new ArrayList<T>();
030 ????????this.layoutID = layoutID;
031 ????????Collections.addAll(list, ts);
032 ????????this.inflater = LayoutInflater.from(context);
033 ????}
034 ?
035 ????public BaseAdapter(Context context, List<T> list, int layoutID) {
036 ????????super();
037 ????????this.layoutID = layoutID;
038 ????????this.context = context;
039 ????????this.list = new ArrayList<T>();
040 ????????this.list.addAll(list);
041 ????????this.inflater = LayoutInflater.from(context);
042 ????}
043 ?
044 ????public Resources getResources() {
045 ????????return context.getResources();
046 ????}
047 ?
048 ????public synchronized void add(T object) {
049 ????????list.add(object);
050 ????}
051 ?
052 ????public synchronized void addAll(Collection<? extends T> collection) {
053 ????????list.addAll(collection);
054 ????}
055 ?
056 ????public synchronized void remove(T object) {
057 ????????list.remove(object);
058 ????}
059 ?
060 ????public synchronized void insert(T object, int index) {
061 ????????list.add(index, object);
062 ????}
063 ?
064 ????public synchronized void clear() {
065 ????????list.clear();
066 ????}
067 ?
068 ????public synchronized void sort(Comparator<? super T> comparator) {
069 ????????Collections.sort(list, comparator);
070 ????}
071 ?
072 ????@Override
073 ????public T getItem(int position) {
074 ????????// TODO Auto-generated method stub
075 ????????return list.get(position);
076 ????}
077 ?
078 ????@Override
079 ????public int getCount() {
080 ????????// TODO Auto-generated method stub
081 ????????return list.size();
082 ????}
083 ?
084 ????@Override
085 ????public long getItemId(int position) {
086 ????????// TODO Auto-generated method stub
087 ????????return position;
088 ????}
089 ?
090 ????@Override
091 ????public View getView(int position, View convertView, ViewGroup parent) {
092 ????????// TODO Auto-generated method stub
093 ????????ViewHolder holder = null;
094 ????????if (convertView == null) {
095 ????????????convertView = inflater.inflate(layoutID, null);
096 ????????????holder = new ViewHolder(convertView);
097 ????????????initView(holder);
098 ????????????convertView.setTag(holder);
099 ????????} else {
100 ????????????holder = (ViewHolder) convertView.getTag();
101 ????????}
102 ????????setViewValue(holder, position);
103 ????????return convertView;
104 ????}
105 ?
106 ????public List<T> getList() {
107 ????????return list;
108 ????}
109 ?????
110 ????/**
111 ?????* 向ViewHolder类里面添加View
112 ?????* @param holder
113 ?????*/
114 ????public abstract void initView(ViewHolder holder);
115 ?
116 ????/**
117 ?????* 从ViewHolder获取对应ID的View设置其值
118 ?????* @param holder
119 ?????* @param t 数据对象
120 ?????*/
121 ????public abstract void setViewValue(ViewHolder holder, int position);
122 ?
123 }

用的时候也是继承它,然后只需要初始化ID和设置Value就行了。例:

01 import java.lang.reflect.Field;
02 import java.lang.reflect.InvocationTargetException;
03 import java.lang.reflect.Method;
04 import java.util.ArrayList;
05 ?
06 import android.annotation.SuppressLint;
07 import android.content.Context;
08 ?
09 import com.fenjin.app.humiture.R;
10 import com.fenjin.app.item.DefaultItem;
11 ?
12 @SuppressLint("DefaultLocale")
13 public class DefaultAdapter extends BaseAdapter<DefaultItem> {
14 ?
15 ????public DefaultAdapter(Context context, Object object) {
16 ????????super(context, new ArrayList<DefaultItem>(),
17 ????????????????R.layout.default_list_item_layout);
18 ????????// TODO Auto-generated constructor stub
19 ????????try {
20 ????????????Field[] fields = object.getClass().getDeclaredFields();
21 ????????????for (Field field : fields) {
22 ????????????????String lable = field.getName();
23 ????????????????String firstWord = lable.substring(0, 1).toUpperCase();
24 ????????????????StringBuffer buffer = new StringBuffer("get");
25 ????????????????buffer.append(firstWord);
26 ????????????????buffer.append(lable.substring(1));
27 ????????????????String name = buffer.toString();
28 ????????????????Method method = object.getClass().getDeclaredMethod(name);
29 ????????????????String value = method.invoke(object).toString();
30 ????????????????DefaultItem item = new DefaultItem(lable, value);
31 ????????????????add(item);
32 ????????????}
33 ????????} catch (IllegalArgumentException e) {
34 ????????????// TODO Auto-generated catch block
35 ????????????e.printStackTrace();
36 ????????} catch (NoSuchMethodException e) {
37 ????????????// TODO Auto-generated catch block
38 ????????????e.printStackTrace();
39 ????????} catch (IllegalAccessException e) {
40 ????????????// TODO Auto-generated catch block
41 ????????????e.printStackTrace();
42 ????????} catch (InvocationTargetException e) {
43 ????????????// TODO Auto-generated catch block
44 ????????????e.printStackTrace();
45 ????????}
46 ????}
47 ?
48 ????@Override
49 ????public void initView(ViewHolder holder) {
50 ????????// TODO Auto-generated method stub
51 ????????holder.addView(R.id.default_lable);
52 ????????holder.addView(R.id.default_value);
53 ????}
54 ?
55 ????@Override
56 ????public void setViewValue(ViewHolder holder, int position) {
57 ????????// TODO Auto-generated method stub
58 ????????DefaultItem item = getItem(position);
59 ????????holder.getTextView(R.id.default_lable).setText(item.getLable());
60 ????????holder.getTextView(R.id.default_value).setText(item.getValue());
61 ????}
62 ?
63 ????@Override
64 ????public boolean isEnabled(int position) {
65 ????????// TODO Auto-generated method stub
66 ????????return false;
67 ????}
68 ?
69 }

javabean代码

01 public class DefaultItem {
02 ?
03 ????String lable;
04 ????String value;
05 ?
06 ????public DefaultItem(String lable, String value) {
07 ????????super();
08 ????????this.lable = lable;
09 ????????this.value = value;
10 ????}
11 ?
12 ????public String getLable() {
13 ????????return lable;
14 ????}
15 ?
16 ????public void setLable(String lable) {
17 ????????this.lable = lable;
18 ????}
19 ?
20 ????public String getValue() {
21 ????????return value;
22 ????}
23 ?
24 ????public void setValue(String value) {
25 ????????this.value = value;
26 ????}
27 ?
28 }

xml代码

01 <?xml version="1.0" encoding="utf-8"?>
02 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
03 ????android:layout_width="match_parent"
04 ????android:layout_height="match_parent"
05 ????android:orientation="horizontal"
06 ????android:padding="@dimen/margin_10" >
07 ?
08 ????<TextView
09 ????????android:id="@+id/default_lable"
10 ????????android:layout_width="wrap_content"
11 ????????android:layout_height="wrap_content" />
12 ?
13 ????<TextView
14 ????????android:layout_width="wrap_content"
15 ????????android:layout_height="wrap_content"
16 ????????android:text=":" />
17 ?
18 ????<TextView
19 ????????android:id="@+id/default_value"
20 ????????android:layout_width="wrap_content"
21 ????????android:layout_height="wrap_content" />
22 ?
23 </LinearLayout>

每次实现的代码仅仅这么点

01 @Override
02 public void initView(ViewHolder holder) {
03 ????// TODO Auto-generated method stub
04 ????holder.addView(R.id.default_lable);
05 ????holder.addView(R.id.default_value);
06 }
07 ?
08 @Override
09 public void setViewValue(ViewHolder holder, int position) {
10 ????// TODO Auto-generated method stub
11 ????DefaultItem item = getItem(position);
12 ????holder.getTextView(R.id.default_lable).setText(item.getLable());
13 ????holder.getTextView(R.id.default_value).setText(item.getValue());
14 }

是不是非常不错呢?

编写自己的Adapter模板

原文:http://lexsain.iteye.com/blog/2189739

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!