Android适配器之基于BaseAdapter定义AbslistView万能适配器
2016-08-23 21:29
561 查看
推荐优先本地搜索浏览 Android适配器之DataModifyHelper数据操作类的封装
定义BaseAdapter抽象基类,抽取共性部分,即实现getCount、getItem、getItemId观察源码可知,在构造函数中实例化DataModifyHelper对象,该对象负责数据的增删改查等操作。适配器中提供getDataModifyHelper方法,供外界获得操作数据的DataModifyHelper帮助类。
源码链接:https://github.com/xiaoxuan948/AndroidUnityLab/tree/master/unity_base_dev_helper/src/main/java/com/coca/unity_base_dev_helper/adapter
来自为知笔记(Wiz)
定义BaseAdapter抽象基类,抽取共性部分,即实现getCount、getItem、getItemId观察源码可知,在构造函数中实例化DataModifyHelper对象,该对象负责数据的增删改查等操作。适配器中提供getDataModifyHelper方法,供外界获得操作数据的DataModifyHelper帮助类。
public abstract class AbsUnityBaseAdapter<T> extends BaseAdapter implements INotifyAdapterDataSetChange { private static final UtilsLog lg = UtilsLog.getLogger(AbsUnityBaseAdapter.class); private LayoutInflater layoutInflater; private IAdapterDataModifyHelper<T> IAdapterataModifyHelper; /** * 构造方法 */ protected AbsUnityBaseAdapter() { this.IAdapterataModifyHelper = new DataModifyHelper<>(); } public IAdapterDataModifyHelper<T> getDataModifyHelper() { this.IAdapterataModifyHelper.setNotifyAdapterDataSetChange(this); return IAdapterataModifyHelper; } @Override public void notifyAdapter() { notifyDataSetChanged(); } /** * default method */ @Override public int getCount() { return IAdapterataModifyHelper.getDataResources().size(); } @Override public T getItem(int position) { //可能数组越界 if (position >= IAdapterataModifyHelper.getDataResources().size()) { lg.e("getItem:index " + position + " is out of size " + IAdapterataModifyHelper.getDataResources().size()); return null; } return IAdapterataModifyHelper.getDataResources().get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { UnityAdapterViewHolder helper = null; if (convertView != null) { helper = (UnityAdapterViewHolder) convertView.getTag(); } else { if (layoutInflater == null) { layoutInflater = LayoutInflater.from(parent.getContext()); } helper = new UnityAdapterViewHolder(layoutInflater, getLayoutId(), parent); } convert(IAdapterataModifyHelper.getDataResources().get(position), helper, position); return helper.getConvertView(); } /*自定义抽象方法*/ public abstract void convert(T itemEntity, UnityAdapterViewHolder helper, int position); public abstract int getLayoutId(); }分析getView部分源码可知,其基于UnityAdapterViewHolder类封装ViewHolder模式,构造方法如下:
/** * Created by Administrator on 2015/8/25. */ public class UnityAdapterViewHolder { private SparseArray<View> views; private View convertView; public UnityAdapterViewHolder(LayoutInflater layoutInflater, int layoutId, ViewGroup parent) { this.views = new SparseArray<>(); this.convertView = layoutInflater.inflate(layoutId, parent, false); this.convertView.setTag(this); } public View getConvertView() { return convertView; } /** * generateView * * @param viewId * @param <T> * @return */ protected <T extends View> T generateView(int viewId) { View view = views.get(viewId); if (view == null) { view = convertView.findViewById(viewId); views.put(viewId, view); } return (T) view; } /** * @param viewId * @param clz * @param <T> * @return */ public <T extends View> T generateView(int viewId, Class<T> clz) { return generateView(viewId); } }业务层使用方式如下:
adapter = new AbsUnityBaseRecyclerAdapter<CorePageEntity>() { @Override public void convert(CorePageEntity itemEntity, UnityRecyclerAdapterViewHolder viewHolder, int position) { viewHolder.generateView(R.id.tvItemCommon, TextView.class).setText(itemEntity.getCorePageTitle()); } @Override public int getItemLayoutId(int viewType) { return R.layout.simple_item_horizontal; } };对于数据修改等操作,基于以下方式调用即可轻松实现。
adapter.getDataModifyHelper().setDataResource( CorePageEntity.create(TestActivity.class), CorePageEntity.create(PullToRefreshActivity.class) );
源码链接:https://github.com/xiaoxuan948/AndroidUnityLab/tree/master/unity_base_dev_helper/src/main/java/com/coca/unity_base_dev_helper/adapter
来自为知笔记(Wiz)
相关文章推荐
- Android高手进阶教程(十六)之---Android中万能的BaseAdapter(Spinner,ListView,GridView)的使用!
- Android高手进阶教程(十六)之---Android中万能的BaseAdapter(Spinner,ListView,GridView)的使用!
- Android 轻量级万能适配器,通吃所有的 AbsListView、RecyclerView
- Android ListView适配器BaseAdapter中getItemViewType需要注意的问题
- 【Android】树形菜单、扩展下拉菜单BaseExpandableListAdapter、AbsListView
- Android中万能的BaseAdapter(Spinner,ListView,GridView)的使用!
- Android学习第五天————ExpandableListView组件通过适配器BaseExpandableListAdapter实现两层列表项
- Android 之万能BaseAdapter是时候来了,为ListView量身打造
- Android万能适配器base-adapter-helper的源代码分析
- Android-ListView适配器BaseAdapter的使用和优化
- Android高手进阶教程(十六)之---Android中万能的BaseAdapter(Spinner,ListView,GridView)的使用!
- Android中万能的BaseAdapter(Spinner,ListView,GridView)的使用!
- android listview继承BaseAdapter,自定义的适配器,getView方法执行多组循环解决方式
- Android中的万能适配器——base-adapter-helper解析
- Android高手进阶教程(十六)之---Android中万能的BaseAdapter(Spinner,ListView,GridView)的使用!
- Android高手进阶教程(十六)之---Android中万能的BaseAdapter(Spinner,ListView,GridView)的使用!
- 【Android】以BaseAdapter做适配器的ListView及其性能优化
- Android高手进阶教程(十六)之---Android中万能的BaseAdapter(Spinner,ListView,GridView)的使用!
- Android适配器之定义PagerAdapter万能适配器
- Android中ListView与适配器ArrayAdapter,SimpleAdapter,定义BaseAdapter适配器,ListView添加headerView,ListView滚动到最后一项