反射实现适配器的封装
2016-09-08 09:36
381 查看
1.通过封装我们可以减少代码的复用率,同时我们也可以减少代码量。
public abstract class CommonAdapter<T,VD extends CommonAdapter.ViewHolder> extends BaseAdapter {
private Context context;
private int layoutId;
private LayoutInflater inflater;
private List<T> list;
public CommonAdapter(Context context, int layoutId, List<T> list) {
this.context = context;
this.layoutId = layoutId;
this.list = list;
inflater =LayoutInflater.from(context);
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
T d = list.get(position);
Class<?> aClass = d.getClass();
Field id = null;
try {
id = aClass.getField("id");
} catch (NoSuchFieldException ignored) {
}
if (id == null) {
try {
id = aClass.getDeclaredField("id");
} catch (NoSuchFieldException ignored) {
}
}
if (id != null) {
try {
return (long) id.get(d);
} catch (IllegalAccessException ignored) {
}
}
Method getId = null;
try {
getId = aClass.getMethod("getId");
} catch (NoSuchMethodException ignored) {
}
if (getId == null) {
try {
getId = aClass.getDeclaredMethod("getId");
} catch (NoSuchMethodException ignored) {
}
}
if (getId != null) {
try {
return (long) getId.invoke(d);
} catch (Exception ignored) {
}
}
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(layoutId,parent,false);
ParameterizedType superclass = (ParameterizedType) getClass().getGenericSuperclass();
Class type = (Class) superclass.getActualTypeArguments()[1];
try {
Constructor constructor = type.getConstructor(View.class);
Object o = constructor.newInstance(convertView);
convertView.setTag(o);
} catch (Exception e) {
e.printStackTrace();
}
}
onBindView(list.get(position), ((VD) convertView.getTag()));
return convertView;
}
public abstract void onBindView(T entry,VD viewHolder);
public static class ViewHolder{
private View viewHolder;
public ViewHolder(View viewHolder) {
this.viewHolder = viewHolder;
}
}
public void addAll(Collection<? extends T> collection){
list.addAll(collection);
notifyDataSetChanged();
}
}
public abstract class CommonAdapter<T,VD extends CommonAdapter.ViewHolder> extends BaseAdapter {
private Context context;
private int layoutId;
private LayoutInflater inflater;
private List<T> list;
public CommonAdapter(Context context, int layoutId, List<T> list) {
this.context = context;
this.layoutId = layoutId;
this.list = list;
inflater =LayoutInflater.from(context);
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
T d = list.get(position);
Class<?> aClass = d.getClass();
Field id = null;
try {
id = aClass.getField("id");
} catch (NoSuchFieldException ignored) {
}
if (id == null) {
try {
id = aClass.getDeclaredField("id");
} catch (NoSuchFieldException ignored) {
}
}
if (id != null) {
try {
return (long) id.get(d);
} catch (IllegalAccessException ignored) {
}
}
Method getId = null;
try {
getId = aClass.getMethod("getId");
} catch (NoSuchMethodException ignored) {
}
if (getId == null) {
try {
getId = aClass.getDeclaredMethod("getId");
} catch (NoSuchMethodException ignored) {
}
}
if (getId != null) {
try {
return (long) getId.invoke(d);
} catch (Exception ignored) {
}
}
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(layoutId,parent,false);
ParameterizedType superclass = (ParameterizedType) getClass().getGenericSuperclass();
Class type = (Class) superclass.getActualTypeArguments()[1];
try {
Constructor constructor = type.getConstructor(View.class);
Object o = constructor.newInstance(convertView);
convertView.setTag(o);
} catch (Exception e) {
e.printStackTrace();
}
}
onBindView(list.get(position), ((VD) convertView.getTag()));
return convertView;
}
public abstract void onBindView(T entry,VD viewHolder);
public static class ViewHolder{
private View viewHolder;
public ViewHolder(View viewHolder) {
this.viewHolder = viewHolder;
}
}
public void addAll(Collection<? extends T> collection){
list.addAll(collection);
notifyDataSetChanged();
}
}
相关文章推荐
- spring + maven +testng 测试常见依赖包问题
- SQL连接、合并、子查询
- clipChildren和clipToPadding
- MySQL学习笔记
- Java———Annotation自定义注解(二)*
- django 提示Site matching query does not exist. 以及创建admin账号
- php添加数据到xml文件的简单例子
- HDU 5727 Necklace(二分图匹配)
- 彻底解决Eclipse不能为JSP编辑器指定编码的问题(设置UTF8无效)
- 第31篇 IOS开发及workerman及安装gearmand
- 2016教师节微信祝福语大全
- 微信-地理位置
- Mongodb与spring集成
- [高并发Java 三] Java内存模型和线程安全
- winfrom 多线程更新UI
- js接收url参数($_GET)
- ElasticSearch中用aggs聚合求每分钟数据求和,并用java获取到数据
- ultraedit:wordfiles下载页面塈增加对(dos)bat脚本的语法高亮(syntax highlighting)显示
- C# LINQ 之化繁至简
- 使用async属性异步加载执行JavaScript