开源项目地址: 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<Status>(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<String>(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<ChatMessage>()
{
@Override
public int getLayoutId(int itemType)
{
//根据itemType返回item布局文件id
}
@Override
public int getItemViewType(int postion, ChatMessage msg)
{
//根据当前的bean返回item type
}
}
mRecyclerView.setAdapter(new SectionAdapter<String>(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