编写自己的Adapter模板

来源:互联网 发布:醉玲珑小说网络点击量 编辑:程序博客网 时间:2024/06/05 18:27
如果你项目一直用系统给你封装的BaseAdapter的话,那么我只想说,你不累么?代码繁多还要写数据缓存,还不如自己动手写一个模板吧,这样后面项目就可以直接套用了,编写和执行效率大大提升啊。BaseAdapter.java
import java.util.ArrayList;import java.util.Collection;import java.util.Collections;import java.util.Comparator;import java.util.List;import android.content.Context;import android.content.res.Resources;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;/** * 实现这个适配器模板会少很多代码 * @author leehom * @param <T> */public abstract class BaseAdapter<T> extends android.widget.BaseAdapter {protected List<T> list;protected Context context;protected LayoutInflater inflater;private int layoutID;public BaseAdapter(Context context, T[] ts, int layoutID) {super();this.context = context;this.list = new ArrayList<T>();this.layoutID = layoutID;Collections.addAll(list, ts);this.inflater = LayoutInflater.from(context);}public BaseAdapter(Context context, List<T> list, int layoutID) {super();this.layoutID = layoutID;this.context = context;this.list = new ArrayList<T>();this.list.addAll(list);this.inflater = LayoutInflater.from(context);}public Resources getResources() {return context.getResources();}public synchronized void add(T object) {list.add(object);}public synchronized void addAll(Collection<? extends T> collection) {list.addAll(collection);}public synchronized void remove(T object) {list.remove(object);}public synchronized void insert(T object, int index) {list.add(index, object);}public synchronized void clear() {list.clear();}public synchronized void sort(Comparator<? super T> comparator) {Collections.sort(list, comparator);}@Overridepublic T getItem(int position) {// TODO Auto-generated method stubreturn list.get(position);}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn list.size();}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubViewHolder holder = null;if (convertView == null) {convertView = inflater.inflate(layoutID, null);holder = new ViewHolder(convertView);initView(holder);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}setViewValue(holder, position);return convertView;}public List<T> getList() {return list;}/** * 向ViewHolder类里面添加View * @param holder */public abstract void initView(ViewHolder holder);/** * 从ViewHolder获取对应ID的View设置其值 * @param holder * @param t 数据对象 */public abstract void setViewValue(ViewHolder holder, int position);}


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

import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.ArrayList;import android.annotation.SuppressLint;import android.content.Context;import com.fenjin.app.humiture.R;import com.fenjin.app.item.DefaultItem;@SuppressLint("DefaultLocale")public class DefaultAdapter extends BaseAdapter<DefaultItem> {public DefaultAdapter(Context context, Object object) {super(context, new ArrayList<DefaultItem>(),R.layout.default_list_item_layout);// TODO Auto-generated constructor stubtry {Field[] fields = object.getClass().getDeclaredFields();for (Field field : fields) {String lable = field.getName();String firstWord = lable.substring(0, 1).toUpperCase();StringBuffer buffer = new StringBuffer("get");buffer.append(firstWord);buffer.append(lable.substring(1));String name = buffer.toString();Method method = object.getClass().getDeclaredMethod(name);String value = method.invoke(object).toString();DefaultItem item = new DefaultItem(lable, value);add(item);}} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (NoSuchMethodException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();}}@Overridepublic void initView(ViewHolder holder) {// TODO Auto-generated method stubholder.addView(R.id.default_lable);holder.addView(R.id.default_value);}@Overridepublic void setViewValue(ViewHolder holder, int position) {// TODO Auto-generated method stubDefaultItem item = getItem(position);holder.getTextView(R.id.default_lable).setText(item.getLable());holder.getTextView(R.id.default_value).setText(item.getValue());}@Overridepublic boolean isEnabled(int position) {// TODO Auto-generated method stubreturn false;}}


javabean代码

01publicclassDefaultItem {
02 
03    String lable;
04    String value;
05 
06    publicDefaultItem(String lable, String value) {
07        super();
08        this.lable = lable;
09        this.value = value;
10    }
11 
12    publicString getLable() {
13        returnlable;
14    }
15 
16    publicvoidsetLable(String lable) {
17        this.lable = lable;
18    }
19 
20    publicString getValue() {
21        returnvalue;
22    }
23 
24    publicvoidsetValue(String value) {
25        this.value = value;
26    }
27 
28}

xml代码

01<?xmlversion="1.0"encoding="utf-8"?>
02<LinearLayoutxmlns: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
02publicvoidinitView(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
09publicvoidsetViewValue(ViewHolder holder, intposition) {
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}

是不是非常不错呢?


0 0
原创粉丝点击