一、多Item布局实现(MultipleItem)

如果之前你用过ListView实现过此功能,那么你一定对下面这两个方法并不陌生

  1. @Override
  2. public int getItemViewType(int position) {
  3. return super.getItemViewType(position);
  4. }
  5.  
  6. @Override
  7. public int getViewTypeCount() {
  8. return super.getViewTypeCount();
  9. }

其中getItemViewType方法是用来获取当前项Item(position参数)是哪种类型的布局,getViewTypeCount方法是用来获取当前listview总共有多少种类型的布局。

如果你用RecyclerView,你会发现getViewTypeCount这个方法没有了,只有一个getItemViewType方法,用法和listview没有任何区别,这里要注意的就是这个函数onCreateViewHolder(ViewGroup parent, int viewType)这里的第二个参数就是View的类型,可以根据这个类型判断去创建不同item的ViewHolder。

  1. public class MultipleItemAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
  2. public static enum ITEM_TYPE {
  3. ITEM_TYPE_IMAGE,
  4. ITEM_TYPE_TEXT
  5. }
  6.  
  7. private final LayoutInflater mLayoutInflater;
  8. private final Context mContext;
  9. private String[] mTitles;
  10.  
  11. public MultipleItemAdapter(Context context) {
  12. mTitles = context.getResources().getStringArray(R.array.titles);
  13. mContext = context;
  14. mLayoutInflater = LayoutInflater.from(context);
  15. }
  16.  
  17. @Override
  18. public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  19. if (viewType == ITEM_TYPE.ITEM_TYPE_IMAGE.ordinal()) {
  20. return new ImageViewHolder(mLayoutInflater.inflate(R.layout.item_image, parent, false));
  21. } else {
  22. return new TextViewHolder(mLayoutInflater.inflate(R.layout.item_text, parent, false));
  23. }
  24. }
  25.  
  26. @Override
  27. public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
  28. if (holder instanceof TextViewHolder) {
  29. ((TextViewHolder) holder).mTextView.setText(mTitles[position]);
  30. } else if (holder instanceof ImageViewHolder) {
  31. ((ImageViewHolder) holder).mTextView.setText(mTitles[position]);
  32. }
  33. }
  34.  
  35. @Override
  36. public int getItemViewType(int position) {
  37. return position % == ? ITEM_TYPE.ITEM_TYPE_IMAGE.ordinal() : ITEM_TYPE.ITEM_TYPE_TEXT.ordinal();
  38. }
  39.  
  40. @Override
  41. public int getItemCount() {
  42. return mTitles == null ? : mTitles.length;
  43. }
  44.  
  45. public static class TextViewHolder extends RecyclerView.ViewHolder {
  46. @InjectView(R.id.text_view)
  47. TextView mTextView;
  48.  
  49. TextViewHolder(View view) {
  50. super(view);
  51. ButterKnife.inject(this, view);
  52. view.setOnClickListener(new View.OnClickListener() {
  53. @Override
  54. public void onClick(View v) {
  55. Log.d("TextViewHolder", "onClick--> position = " + getPosition());
  56. }
  57. });
  58. }
  59. }
  60.  
  61. public static class ImageViewHolder extends RecyclerView.ViewHolder {
  62. @InjectView(R.id.text_view)
  63. TextView mTextView;
  64. @InjectView(R.id.image_view)
  65. ImageView mImageView;
  66.  
  67. ImageViewHolder(View view) {
  68. super(view);
  69. ButterKnife.inject(this, view);
  70. view.setOnClickListener(new View.OnClickListener() {
  71. @Override
  72. public void onClick(View v) {
  73. Log.d("ImageViewHolder", "onClick--> position = " + getPosition());
  74. }
  75. });
  76. }
  77. }
  78. }

怎么样,是不是很简单,没错,就是这么简单,但是只要会了这个多Item,那么你就可以做出很多效果了,比如HeaderView和BottomView也是可以通过这种方式来实现的。(HeaderView Adapter)

RecyclerView 展示多种类型Item数据的更多相关文章

  1. ListView之多种类型Item

    一.概述 一般而言,listview每个item的样式是一样的,但也有很多应用场景下不同位置的item需要不同的样式. 拿微信举例,前者的代表作是消息列表,而后者的典型则是聊天会话界面. 本文重点介绍 ...

  2. jsp页面struts2标签展示clob类型的数据

    直接从数据库中查出来的数据,是clob类型的在前端页面展示的时候是这样: 后来找到了一个方法,在action中添加一个方法,解析转换clob数据的方法 public String getClob(Cl ...

  3. [Android]使用AdapterTypeRender对不同类型的item数据到UI的渲染

    以下内容为原创,转载请注明: 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3992843.html 本文讲的工具均放在AndroidBucket开源 ...

  4. 使用AdapterTypeRender对不同类型的item数据到UI的渲染

    要实现聊天功能中的发送不同类型的信息,比如纯文本.图片.语音.图文混排多媒体的数据等(具体效果看微信). 这里使用AdapterTypeRender在BaseTypeAdapter(这个之后会讲到)中 ...

  5. Android商城开发系列(七)—— 使用RecyclerView展示首页数据

    前面我们讲到了使用OkHttp请求网络和FastJson解析数据了,接下来我们就开始把获取到的数据通过数据适配器展示在页面上了.Adapter是用来帮助填充数据的中间桥梁,简单点说就是:将各种数据以合 ...

  6. Android教程2020 - RecyclerView显示多种item

    Android教程2020 - 系列总览 本文链接 前面我们已经用RecyclerView显示一些数据.也知道如何获取滑动的距离. 前面我们的列表中显示的都是同类数据.如果要在一个列表中显示不同类别的 ...

  7. Android进阶笔记11:ListView篇之ListView显示多种类型的条目(item)

    ListView可以显示多种类型的条目布局,这里写显示两种布局的情况,其他类似. 1. 这是MainActivity,MainActivity的布局就是一个ListView,太简单了这里就不写了,直接 ...

  8. ListView显示多种类型的item

    ListView可以显示多种类型的条目布局,这里写显示两种布局的情况,其他类似 这是MainActivity:,MainActivity的布局就是一个ListView public class Mai ...

  9. Android进阶笔记10:ListView篇之ListView显示多种类型的条目(item)

    ListView可以显示多种类型的条目布局,这里写显示两种布局的情况,其他类似. 1. 这是MainActivity,MainActivity的布局就是一个ListView,太简单了这里就不写了,直接 ...

随机推荐

  1. PostgreSQL数据库创建/删除

    方法1 - 系统命令 sudo su - postgres #切换到postgres用户(系统用户) createdb weichen #创建数据库 psql #直接訪问数据库(默认进入本地postg ...

  2. 并查集树数据结构hdu1325

    我的解法就是去构造了一棵树 以数组的存储方式 数组的值存放节点的根. 排除空树 剩下的就是出现环和多根节点的情况 也就是排除森林和有一个节点多个入度的情况 排除森林就用到了并查集 也就是便利数组让其仅 ...

  3. BZOJ3158: 千钧一发

    [传送门:BZOJ3158] 简要题意: 给出n个机器,每个机器有a[i]基础值和b[i]价值 选出一部分机器使得这些机器里面两两至少满足以下两种条件之一: 1.a[i]2+a[j]2!=T2(T为正 ...

  4. orm 通用方法——QueryModelCount条件查询记录数

    定义代码: /** * 描述:根据条件查询对象数 * 作者:Tianqi * 日期:2014-09-17 * param:model 对象实例 * param:cond 查询条件 * return:i ...

  5. AIX 系统补丁格式

    AIX 系统版本标准格式: 5300-06-11-0918 VR00-TL-SP-YYWW     5300-06-11-0918              ^-------- YYWW(2009年第 ...

  6. angular4自定义组件非input元素实现ngModel双向数据绑定

    在angular里我们一般都是给input元素添加[(ngModel)]="value"实现数据双向绑定,如果想实现自定义的组件上实现ngModel双向数据绑定应该怎么办呐... ...

  7. 【Cocos游戏实战】功夫小子第五课之帮助场景和选关功能的实现

    功夫小子之帮助场景和选关功能的实现 转载请注明出处:http://blog.csdn.net/suool/article/details/46661231 本节课的视频教程地址是: hmsr=teac ...

  8. 自编Photoshop简单教程

    由于本科时对图形图像比較感兴趣所以Ps和Ai玩的还算能够.所以无论本科时候还是研究生阶段总是有非常多人让我帮忙处理一些图片.记得工作那一年參与一个大项目时还帮了CRI里员工处理了一些图片项目中也处理了 ...

  9. 转:mac环境下使用svn

    在Windows环境中,我们一般使用TortoiseSVN来搭建svn环境.在Mac环境下,由于Mac自带了svn的服务器端和客户端功能,所以我们可以在不装任何第三方软件的前提下使用svn功能,不过还 ...

  10. 配置Xcode版本控制SVN详细步骤内含解决Xcode/Mac OS10.8无法配置SVN的解决方法

    本站文章均为李华明Himi原创,转载务必在明显处注明:(作者新浪微博:@李华明Himi ) 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/game-de ...