RecyclerView解密篇(二)
来源:互联网 发布:80 8080端口 编辑:程序博客网 时间:2024/06/02 19:42
欢迎Follow我的GitHub, 关注我的CSDN. 其余参考Android目录.已同步微信公众号:猛戳这里
转载请注明出入谢谢! http://blog.csdn.net/xiaole0313/article/details/53834809
推荐文章:
如果你喜欢上了一个程序员小伙,献给所有的程序员女友
在上一篇(RecyclerView解密篇(一))文章中简单的介绍了RecyclerView的基本用法,接下来要来讲讲RecyclerView的更多用法,要实现不同的功能效果,大部分都还是在于RecyclerView的Adapter写法,所以我们着重来看看几种不同功能的Adapter写法。
一、多Item布局实现(MultipleItem)
如果之前你用过ListView实现过此功能,那么你一定对下面这两个方法并不陌生
@Override public int getItemViewType(int position) { return super.getItemViewType(position); } @Override public int getViewTypeCount() { return super.getViewTypeCount(); }
其中getItemViewType方法是用来获取当前项Item(position参数)是哪种类型的布局,getViewTypeCount方法是用来获取当前listview总共有多少种类型的布局。
如果你用RecyclerView,你会发现getViewTypeCount这个方法没有了,只有一个getItemViewType方法,用法和listview没有任何区别,这里要注意的就是这个函数onCreateViewHolder(ViewGroup parent, int viewType)这里的第二个参数就是View的类型,可以根据这个类型判断去创建不同item的ViewHolder。
public class MultipleItemAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { public static enum ITEM_TYPE { ITEM_TYPE_IMAGE, ITEM_TYPE_TEXT } private final LayoutInflater mLayoutInflater; private final Context mContext; private String[] mTitles; public MultipleItemAdapter(Context context) { mTitles = context.getResources().getStringArray(R.array.titles); mContext = context; mLayoutInflater = LayoutInflater.from(context); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == ITEM_TYPE.ITEM_TYPE_IMAGE.ordinal()) { return new ImageViewHolder(mLayoutInflater.inflate(R.layout.item_image, parent, false)); } else { return new TextViewHolder(mLayoutInflater.inflate(R.layout.item_text, parent, false)); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder instanceof TextViewHolder) { ((TextViewHolder) holder).mTextView.setText(mTitles[position]); } else if (holder instanceof ImageViewHolder) { ((ImageViewHolder) holder).mTextView.setText(mTitles[position]); } } @Override public int getItemViewType(int position) { return position % 2 == 0 ? ITEM_TYPE.ITEM_TYPE_IMAGE.ordinal() : ITEM_TYPE.ITEM_TYPE_TEXT.ordinal(); } @Override public int getItemCount() { return mTitles == null ? 0 : mTitles.length; } public static class TextViewHolder extends RecyclerView.ViewHolder { @InjectView(R.id.text_view) TextView mTextView; TextViewHolder(View view) { super(view); ButterKnife.inject(this, view); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d("TextViewHolder", "onClick--> position = " + getPosition()); } }); } } public static class ImageViewHolder extends RecyclerView.ViewHolder { @InjectView(R.id.text_view) TextView mTextView; @InjectView(R.id.image_view) ImageView mImageView; ImageViewHolder(View view) { super(view); ButterKnife.inject(this, view); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d("ImageViewHolder", "onClick--> position = " + getPosition()); } }); } }}
怎么样,是不是很简单,没错,就是这么简单,但是只要会了这个多Item,那么你就可以做出很多效果了,比如HeaderView和BottomView也是可以通过这种方式来实现的。(HeaderView Adapter)
二、效果图如下:
RecyclerView解密篇(一)
RecyclerView解密篇(三)
续篇尽请等待!!!
1、Android面试经验大解密
2、Android的viewHolder模式解剖
3、Android中必须学习的八大开源项目(开发项目必看)
4、如何自学Android, 教大家玩爆Android(成为大神必看)
5、2016 Google hosts 持续更新【更新 于:2016-08-27】(免费翻墙必备)
6、Android面试经验总结(面试成功必备)
7、Android Studio 个性化设置(装逼必备)
8、Android Studio 2.2 正式起航(玩爆Android Studio 2.2必备)
Android Studio 2.2 新功能实例代码:
Android Studio 2.2新功能实例源码(玩爆Android Studio 2.2必备)
Android Studio 2.2新功能介绍:
What's new in Android development tools - Google I/O 2016(YouTube视频需要自备梯子)
【GitHub】https://github.com/xiaole0310
【csdn博客】http://blog.csdn.net/xiaole0313
【新浪微博】http://weibo.com/u/5439466748
【知乎】http://www.zhihu.com/people/yang-shou-le
【简书】http://www.jianshu.com/users/1a47e8afa34a
【技术群】279126311 [满]
【技术群】484572225 [未]
【Email】ysle0313@gmail.com
Android Studio 2.2 新功能实例代码:
Android Studio 2.2新功能实例源码(玩爆Android Studio 2.2必备)
如果你有好的文章想和大家分享,欢迎投稿,直接向我投递文章链接即可。
欢迎扫描关注我们的微信公众号(ysle_0313),不要错过每一篇干货~
一键关注我们微信公众号 ysle_0313
- RecyclerView解密篇(二)
- RecyclerView解密篇(一)
- RecyclerView解密篇(三)
- RecyclerView 解析(二)
- RecyclerView 练习(二)
- 理解RecyclerView的RecyclerView.ItemDecoration(二)
- OpenVPN解密(二)
- 维基利亚加解密(二)
- RecyclerView使用详解(二)
- RecyclerView使用详解(二)
- RecyclerView使用详解(二)
- RecyclerView使用详解(二)
- RecyclerView使用详解(二)
- RecyclerView总结学习(二)
- RecyclerView剖析学习(二)
- RecyclerView使用详解(二)
- RecyclerView使用详解(二)
- 从零开始学习RecyclerView(二)
- C语言提高班学习笔记 lesson5 编译
- 开发人员与测试人员, 道不同也相谋
- 自由与幸福
- 兼顾屏幕分辨率的应用---Activity与Fragment的交互
- FirePHP安装使用
- RecyclerView解密篇(二)
- 我的第一篇博客
- 【工具使用】MySQL的安装及环境变量配置(以windows10为例)
- solr 5.3 安装部署
- MySQL 数据备份与还原
- 【Java每日一题】20161223
- 使用navicat备份和还原mysql数据库
- Struts2框架剖析
- Faster rcnn 学习笔记