博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RecyclerView使用详解(二)
阅读量:6801 次
发布时间:2019-06-26

本文共 3531 字,大约阅读时间需要 11 分钟。

在上一篇()文章中简单的介绍了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
{
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也是可以通过这种方式来实现的。()

二、效果图如下:

转载于:https://www.cnblogs.com/youseiraws/p/7071092.html

你可能感兴趣的文章
12294错误事件的处理--利用审核日志查找病毒来源
查看>>
第25讲: Scala中柯里化实战详解
查看>>
81.LAMP,PHP5和PHP7安装
查看>>
linux服务(一)LAMP编译安装
查看>>
一次RPC调用时间都去哪儿了
查看>>
linux的rsync工具的常用选项及ssh同步介绍
查看>>
oracle内存体系(二)
查看>>
ReflectASM的使用
查看>>
Sapphire国际移动设备标识IEMI和国际移动用户标识IMSI控件Sapphire IMEI U
查看>>
智能家居监控移动手机组态现实生活中的应用
查看>>
笔试题、面试题
查看>>
shell 数组
查看>>
Linux操作系统的安装
查看>>
服务器RAID
查看>>
python函数是引用传递(对可变对象而言)
查看>>
Cisco ASA防火墙简易配置与调试手册
查看>>
Node.js搭建聊天室
查看>>
Rob Pike的5个编程原则
查看>>
centos6.5下ntopng安装
查看>>
js控制本地文件及目录的方法
查看>>