编写自己的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代码
xml代码
每次实现的代码仅仅这么点
是不是非常不错呢?
- 本文固定链接: http://www.ithtw.com/1300.html
- leehom 2015年03月06日 于 IT十万为什么 发表
0 0
- 编写自己的Adapter模板
- javascript编写自己的模板解析器
- 如何模范标准模板类编写自己的模板
- 定义自己的Adapter
- 如何用PHP来编写自己的模板引擎
- 如何用PHP来编写自己的模板引擎
- Adapter的编写getView方法
- Kotlin编写RecyclerView的Adapter
- android--listView的adapter模板
- adapter模板
- 43通讯录的adapter的编写
- 编写自己的IDE
- 编写自己的IDE
- 编写自己的IDE
- 编写自己的IDE
- 编写自己的IDE
- 编写自己的对象
- 编写自己的操作系统
- iOS 文件读写 (一)
- android httpclient单例模式
- 数据结构和算法学习系列之插入排序及希尔排序
- Apple Watch获得IF产品设计奖金奖
- shell传入参数处理方式
- 编写自己的Adapter模板
- 在linux 上安装oracle database 对 32bit rpm 和64bit rpm的要求
- STM32的系统滴答定时器(Systick) 彻底研究解读
- BZOJ 3678 wangxz与OJ 缩点Splay
- 什么是依赖注入
- 关于七牛私有音视频资源播放显示401,但是token生成正确的解决办法。
- CSS常用代码使用技巧大全
- 添加启动游戏过渡场景Default Splash Scene(Unity3D开发之十三)
- Log4j 日志配置示例详解