Android开发之adapter
16lz
2021-01-24
开源项目地址: https://github.com/JoanZapata/base-adapter-helper
项目依赖添加
compile 'com.joanzapata.android:base-adapter-helper:1.1.11'
BaseAdapterHelper
还有部分set方法就不一一列举了,如果你还有一些自己的自定义控件的set、get方法也可以自己往内部添加,调用方法builder模式,BaseAdapterHelper也就是我们常用的ViewHolder,换了一种更为优雅的方式展现在我们面前。
return BaseAdapterHelper.get(context, convertView, parent, R.layout.item) .setText(R.id.tvName, contact.getName()) .setText(R.id.tvEmails, contact.getEmails().toString()) .setText(R.id.tvNumbers, contact.getNumbers().toString()) .getView();
BaseQuickAdapter
BaseQuickAdapter内部提供了一些数据得操作方法,供外部调用,getItemViewType默认支持多种布局,这里默认0,getView方法内获取BaseAdapterHelper实例,调用helper.getView获得converView
@Override public View getView(int position, View convertView, ViewGroup parent) { if (getItemViewType(position) == 0) { final H helper = getAdapterHelper(position, convertView, parent); T item = getItem(position); // 抽象方法,具体实现根据自己业务需求 convert(helper, item); helper.setAssociatedObject(item); return helper.getView(); } return createIndeterminateProgressView(convertView, parent); }
QuickAdapter
重写了两个构造方法,实现了获取BaseAdapterHelper实例
protected BaseAdapterHelper getAdapterHelper(int position, View convertView, ViewGroup parent) { return get(context, convertView, parent, layoutResId, position); }
EnhancedQuickAdapter
EnhancedQuickAdapter相比较于QuickAdapter,重写了covert方法,新增itemChange的状态值
@Override protected final void convert(BaseAdapterHelper helper, T item) { boolean itemChanged = helper.associatedObject == null || !helper.associatedObject.equals(item); helper.associatedObject = item; convert(helper, item, itemChanged); } /** * @param helper The helper to use to adapt the view. * @param item The item you should adapt the view to. * @param itemChanged Whether or not the helper was bound to another object before. */ protected abstract void convert(BaseAdapterHelper helper, T item, boolean itemChanged);
大概类过了一遍,再来看看具体的代码调用实例
if (adapter == null) adapter = new QuickAdapter(getActivity(), R.layout.tweet,mList) { @Override protected void convert(BaseAdapterHelper helper, Status status) { boolean isRetweet = status.isRetweet(); if (isRetweet) status = status.getRetweetedStatus(); helper.setText(tweetText, status.getText()) .setVisible(tweetRT, isRetweet) .setText(tweetName, status.getUser().getName()) .setText(tweetDate, dateFormat.format(status.getCreatedAt())) .setImageUrl(tweetAvatar, status.getUser().getProfileImageURL()) .linkify(tweetText); } }; listView.setAdapter(adapter);
洪洋的BaseAdapter
引用项目依赖
compile 'com.zhy:base-adapter:2.0.0'
base-adapter-helper这个库对Adapter的封装还不是最彻底的,目前洪洋的BaseAdapter在这个库的基础上再次封装,使用更方便简单,扩展性能更好https://github.com/hongyangAndroid/baseAdapter,Adapter常用的单种Item:
mRecyclerView.setAdapter(new CommonAdapter(this, R.layout.item_list, mDatas){ @Override public void convert(ViewHolder holder, String s) { holder.setText(R.id.id_item_list_title, s); }});
多种Item或Header布局:
MultiItemTypeSupport multiItemSupport = new MultiItemTypeSupport(){ @Override public int getLayoutId(int itemType) { //根据itemType返回item布局文件id } @Override public int getItemViewType(int postion, ChatMessage msg) { //根据当前的bean返回item type }}mRecyclerView.setAdapter(new SectionAdapter(this, mDatas, multiItemSupport){ @Override public void convert(ViewHolder holder, String s) { holder.setText(R.id.id_item_list_title, s); }});
对于该库翔已有博客说明不再累赘叙述,本篇只做个记录,翔博客地址:http://blog.csdn.net/lmj623565791/article/details/51118836
更多相关文章
- 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
- 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
- LogCat中不输出任何的信息
- Android与JS之间的互相调用交互(二)
- 动态设置控件宽高
- android - ViewPager 监听左右滑动
- Android(安卓)工具
- Android(安卓)解决bug:异常提示"ListView cannot be cast to andr
- ViewGroup为什么不会调用onDraw