[android开发]封装BaseAdapter, 简便代码
来源:互联网 发布:王者荣耀延迟高4g网络 编辑:程序博客网 时间:2024/06/08 18:27
参数说明: 构造函数的list参数是你的ListView的数据, 而viewHolder是你的ViewHolder类.
思路说明: getView方法中已经实现了view的初始化, 并且把viewholder中的字段进行注入, 然后通过view.setTag()设置给该view.
使用说明: 在抽象方法initView中通过view.getTag()拿到viewholder, 然后对里面的控件进行操作即可~
当然, 这样封装会有一些局限性, 毕竟封装了就会失去一些灵活性嘛.
public abstract class BeanAdapter extends BaseAdapter {List mList;Context context;int layoutId;Class wiewHolder;public BeanAdapter(Context context, int layoutId, List list, Class wiewHolder) {this.mList = list;this.context = context;this.layoutId = layoutId;this.wiewHolder = wiewHolder;}@Overridepublic int getCount() {return mList.size();}@Overridepublic Object getItem(int position) {return mList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View view, ViewGroup parent) {if (view == null) {view = LayoutInflater.from(context).inflate(layoutId, parent, false);try {Constructor constructor = wiewHolder.getDeclaredConstructor();constructor.setAccessible(true);Object obj = constructor.newInstance();ViewUtil.setViewHolder(view, obj);} catch (Exception e) {}}initView(position, getItem(position), view, view.getTag());return view;}public abstract void initView(int position, Object item, View view, Object viewHolder);}
附上setViewHolder方法, 跟另一篇文章的属性注入findView方法类似:
//自动注入 根据viewHolder中成员变量的名称注入view,并通过setTag()设置给view
public static void setViewHolder(View view, Object viewHolder) {try {ViewGroup viewGroup = (ViewGroup) view;Class clazz = viewHolder.getClass();Field[] fields = clazz.getDeclaredFields();String fieldName = null;// 遍历所有字段for (Field field : fields) {fieldName = field.getName();// 包含_try {Field idField = R.id.class.getField(fieldName);int id = (Integer) idField.get(null);view = viewGroup.findViewById(id);field.setAccessible(true);// 设置给viewHolderfield.set(viewHolder, view);} catch (Exception e) {}}// viewHolder设置给viewGroupviewGroup.setTag(viewHolder);} catch (Exception e) {}}
0 0
- [android开发]封装BaseAdapter, 简便代码
- Android开发技巧——BaseAdapter的另一种优雅封装
- Android BaseAdapter与BaseExpandableListAdapter封装
- Android ListView封装(代码优化):抽取方法共性,封装 BaseAdapter 和 ViewHolder
- Android开发相关简便框架
- BaseAdapter的封装来实现模块化开发
- Android 完美对BaseAdapter进行二次封装
- Android BaseAdapter的极简封装
- Android开发ListView之BaseAdapter
- 超级封装BaseAdapter,让你省下千万行代码
- 最新android开发环境搭建(简便)
- 搭建android开发平台的简便方法
- Android BaseAdapter 图+文+代码 +ListView
- Android 对ListView和RecyclerView的两个BaseAdapter封装分享
- Android开发网站收藏,及BaseAdapter使用
- Android入门笔记 - 界面开发 - GridView, BaseAdapter
- Android开发——BaseAdapter的使用
- Android开发——BaseAdapter的优化
- ThinkPHP3.1.2整合UCenter详解(四)
- sqlserver与access通用的连接数据库代码
- CentOS6.5搭建LNMP
- Java 代码覆盖率注入方式
- C++中的函数指针和函数对象总结(转)
- [android开发]封装BaseAdapter, 简便代码
- 网络协议杂谈
- 一种分表的想法
- Android开发工具下载地址
- property中的strong 、weak、copy 、assign 、retain 、unsafe_unretained 与autoreleasing区别和作用详解
- Transfer-Encoding详解以及erlang中的实现
- SQL Server 列转行
- android support v7 Toolbar控件
- springMVC 快速入门