本篇文章主要介绍了"编写自己的Adapter模板",主要涉及到方面的内容,对于Android开发感兴趣的同学可以参考一下:
如果你项目一直用系统给你封装的BaseAdapter的话,那么我只想说,你不累么?代码繁多还要写数据缓存,还不如自己动手写一个模板吧,这样后面项目就可以直接套用...
如果你项目一直用系统给你封装的BaseAdapter的话,那么我只想说,你不累么?代码繁多还要写数据缓存,还不如自己动手写一个模板吧,这样后面项目就可以直接套用了,编写和执行效率大大提升啊。
BaseAdapter.javaimport 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
*/
public abstract class BaseAdapter extends android.widget.BaseAdapter {
protected List 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();
this.layoutID = layoutID;
Collections.addAll(list, ts);
this.inflater = LayoutInflater.from(context);
}
public BaseAdapter(Context context, List list, int layoutID) {
super();
this.layoutID = layoutID;
this.context = context;
this.list = new ArrayList();
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);
}
@Override
public T getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder 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 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 {
public DefaultAdapter(Context context, Object object) {
super(context, new ArrayList(),
R.layout.default_list_item_layout);
// TODO Auto-generated constructor stub
try {
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 block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void initView(ViewHolder holder) {
// TODO Auto-generated method stub
holder.addView(R.id.default_lable);
holder.addView(R.id.default_value);
}
@Override
public void setViewValue(ViewHolder holder, int position) {
// TODO Auto-generated method stub
DefaultItem item = getItem(position);
holder.getTextView(R.id.default_lable).setText(item.getLable());
holder.getTextView(R.id.default_value).setText(item.getValue());
}
@Override
public boolean isEnabled(int position) {
// TODO Auto-generated method stub
return false;
}
}
javabean代码01publicclassDefaultItem
{
06 publicDefaultItem(String
lable, String value) {
12 publicString
getLable() {
16 publicvoidsetLable(String
lable) {
20 publicString
getValue() {
24 publicvoidsetValue(String
value) {
xml代码01xmlversion="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">
09 android:id="@+id/default_lable"
10 android:layout_width="wrap_content"
11 android:layout_height="wrap_content"/>
14 android:layout_width="wrap_content"
15 android:layout_height="wrap_content"
19 android:id="@+id/default_value"
20 android:layout_width="wrap_content"
21 android:layout_height="wrap_content"/>
每次实现的代码仅仅这么点02publicvoidinitView(ViewHolder
holder) {
03 //
TODO Auto-generated method stub
04 holder.addView(R.id.default_lable);
05 holder.addView(R.id.default_value);
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());
是不是非常不错呢?- 本文固定链接: http://www.ithtw.com/1300.html
- leehom 2015年03月06日 于 IT十万为什么 发表
以上就介绍了编写自己的Adapter模板,包括了方面的内容,希望对Android开发有兴趣的朋友有所帮助。
本文网址链接:http://www.codes51.com/article/detail_116480.html