adapter总是自己写,其实使用现成的框架会节省不少代码

原文地址:https://github.com/hongyangAndroid/baseAdapter

base-adapter

Android 万能的Adapter for ListView,RecyclerView,GridView等,支持多种Item类型的情况。

引入

ForRecyclerView

compile 'com.zhy:base-rvadapter:3.0.3'

ForListView

compile 'com.zhy:base-adapter:3.0.3'

使用

##(1)简单的数据绑定(ListView与其使用方式一致)

首先看我们最常用的单种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);
}
});

是不是相当方便,在convert方法中完成数据、事件绑定即可。

只需要简单的将Adapter继承CommonAdapter,复写convert方法即可。省去了自己编写ViewHolder等大量的重复的代码。

  • 可以通过holder.getView(id)拿到任何控件。
  • ViewHolder中封装了大量的常用的方法,比如holder.setText(id,text),holder.setOnClickListener(id,listener)等,可以支持使用。

效果图:

##(2)多种ItemViewType(ListView与其使用方式一致)

对于多中itemviewtype的处理参考:https://github.com/sockeqwe/AdapterDelegates ,具有极高的扩展性。

MultiItemTypeAdapter adapter = new MultiItemTypeAdapter(this,mDatas);
adapter.addItemViewDelegate(new MsgSendItemDelagate());
adapter.addItemViewDelegate(new MsgComingItemDelagate());

每种Item类型对应一个ItemViewDelegete,例如:

public class MsgComingItemDelagate implements ItemViewDelegate<ChatMessage>
{ @Override
public int getItemViewLayoutId()
{
return R.layout.main_chat_from_msg;
} @Override
public boolean isForViewType(ChatMessage item, int position)
{
return item.isComMeg();
} @Override
public void convert(ViewHolder holder, ChatMessage chatMessage, int position)
{
holder.setText(R.id.chat_from_content, chatMessage.getContent());
holder.setText(R.id.chat_from_name, chatMessage.getName());
holder.setImageResource(R.id.chat_from_icon, chatMessage.getIcon());
}
}

贴个效果图:

##(3) 添加HeaderView、FooterView

mHeaderAndFooterWrapper = new HeaderAndFooterWrapper(mAdapter);

TextView t1 = new TextView(this);
t1.setText("Header 1");
TextView t2 = new TextView(this);
t2.setText("Header 2");
mHeaderAndFooterWrapper.addHeaderView(t1);
mHeaderAndFooterWrapper.addHeaderView(t2); mRecyclerView.setAdapter(mHeaderAndFooterWrapper);
mHeaderAndFooterWrapper.notifyDataSetChanged();

类似装饰者模式,直接将原本的adapter传入,初始化一个HeaderAndFooterWrapper对象,然后调用相关API添加。

##(4) 添加LoadMore

mLoadMoreWrapper = new LoadMoreWrapper(mOriginAdapter);
mLoadMoreWrapper.setLoadMoreView(R.layout.default_loading);
mLoadMoreWrapper.setOnLoadMoreListener(new LoadMoreWrapper.OnLoadMoreListener()
{
@Override
public void onLoadMoreRequested()
{
}
}); mRecyclerView.setAdapter(mLoadMoreWrapper);

直接将原本的adapter传入,初始化一个LoadMoreWrapper对象,然后调用相关API即可。

##(5)添加EmptyView

mEmptyWrapper = new EmptyWrapper(mAdapter);
mEmptyWrapper.setEmptyView(R.layout.empty_view); mRecyclerView.setAdapter(mEmptyWrapper );

直接将原本的adapter传入,初始化一个EmptyWrapper对象,然后调用相关API即可。

支持链式添加多种功能,示例代码:

mAdapter = new EmptyViewWrapper(
new LoadMoreWrapper(
new HeaderAndFooterWrapper(mOriginAdapter)));

一些回调

onViewHolderCreated

mListView.setAdapter(new CommonAdapter<String>(this, R.layout.item_list, mDatas)
{
@Override
public void convert(ViewHolder holder, String o, int pos)
{
holder.setText(R.id.id_item_list_title, o);
} @Override
public void onViewHolderCreated(ViewHolder holder, View itemView)
{
super.onViewHolderCreated(holder, itemView);
//AutoUtil.autoSize(itemView)
}
});

最新文章

  1. C#Excel文件加密实现,支持xlsx、docx、pptx(C#\Net\Asp.Net)
  2. for in 遍历json
  3. RelativeLayout中实现控件平分屏幕
  4. hdu 5459 Jesus Is Here (费波纳茨递推)
  5. [C和指针]第一部分
  6. javascript笔记02:严格模式的特定要求
  7. js replace in multi-line string
  8. SQL Server日期函数之获得一个月中的天数
  9. [RxJS] Combination operator: zip
  10. php基础知识【函数】(7)url和ob函数
  11. Swift语言Auto Layout入门教程:上篇
  12. 华硕K55DR体验 - 显卡就是坑
  13. ffmpeg源码编译安装(Compile ffmpeg with source) Part 1 : 通用部分
  14. Mybatis(二)入门程序-通过id查找用户、模糊查找用户、添加用户、删除用户
  15. Git使用三:git的使用流程
  16. 基于php实现QQ授权登陆
  17. 什么是XML RPC?
  18. UITableVIew与UICollectionView带动画删除cell时崩溃的处理
  19. vue进行路由拼图的使用案例
  20. Sql Server统计报表案例

热门文章

  1. maven中net.sf.json报错的解决方法(转载)
  2. SQL Server 代理(已禁用代理 XP)
  3. Robotframework Web自动化实战课程
  4. Spring实战第一部分总结
  5. [USACO13FEB]出租车Taxi
  6. CentOS 5.8 安装python 和 yum
  7. 01-UIScrollView01-大图片展示
  8. 深入分析Spring 与 Spring MVC容器(山东数漫江湖)
  9. TensorFlow非线性拟合
  10. 【HNOI】 lct tree-dp