编写自己的Adapter模板_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 编写自己的Adapter模板

编写自己的Adapter模板

 2015/3/6 15:21:45  lexsain  程序员俱乐部  我要评论(0)
  • 摘要:如果你项目一直用系统给你封装的BaseAdapter的话,那么我只想说,你不累么?代码繁多还要写数据缓存,还不如自己动手写一个模板吧,这样后面项目就可以直接套用了,编写和执行效率大大提升啊。BaseAdapter.java001importjava.util.ArrayList;002importjava.util.Collection;003importjava.util.Collections;004importjava.util.Comparator;005importjava.util
  • 标签:模板 自己

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

monospace !important; direction: ltr !important; display: block !important; background: none !important;">001 class="keyword" style="border: 0px !important; padding: 0px !important; margin: 0px !important; float: none !important; vertical-align: baseline !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: bold !important; direction: ltr !important; display: inline !important; color: #006699 !important; background: none !important;">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 }

是不是非常不错呢?

  • 本文固定链接:?http://www.ithtw.com/1300.html
  • leehom?2015年03月06日?于?IT十万为什么?发表
发表评论
用户名: 匿名