Android RecyclerView使用详解(二)
在上一篇(RecyclerView使用详解(一))文章中简单的介绍了RecyclerView的基本用法,接下来要来讲讲RecyclerView的更多用法,要实现不同的功能效果,大部分都还是在于RecyclerView的Adapter写法,所以我们着重来看看几种不同功能的Adapter写法。
##一、多Item布局实现(MultipleItem)
如果之前你用过ListView实现过此功能,那么你一定对下面这两个方法并不陌生
[代码]java代码:
| 1 2 3 4 5 6 7 8 9 | @OverridepublicintgetItemViewType(intposition) {    returnsuper.getItemViewType(position);}@OverridepublicintgetViewTypeCount() {    returnsuper.getViewTypeCount();} | 
其中getItemViewType方法是用来获取当前项Item(position参数)是哪种类型的布局,getViewTypeCount方法是用来获取当前listview总共有多少种类型的布局。
如果你用RecyclerView,你会发现getViewTypeCount这个方法没有了,只有一个getItemViewType方法,用法和listview没有任何区别,这里要注意的就是这个函数onCreateViewHolder(ViewGroup parent, int viewType)这里的第二个参数就是View的类型,可以根据这个类型判断去创建不同item的ViewHolder。
[代码]java代码:
| 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | publicclassMultipleItemAdapter extendsRecyclerView.Adapter<recyclerview.viewholder> {    publicstaticenumITEM_TYPE {        ITEM_TYPE_IMAGE,        ITEM_TYPE_TEXT    }        privatefinalLayoutInflater mLayoutInflater;    privatefinalContext mContext;    privateString[] mTitles;    publicMultipleItemAdapter(Context context) {        mTitles = context.getResources().getStringArray(R.array.titles);        mContext = context;        mLayoutInflater = LayoutInflater.from(context);    }    @Override    publicRecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, intviewType) {        if(viewType == ITEM_TYPE.ITEM_TYPE_IMAGE.ordinal()) {            returnnewImageViewHolder(mLayoutInflater.inflate(R.layout.item_image, parent, false));        } else{            returnnewTextViewHolder(mLayoutInflater.inflate(R.layout.item_text, parent, false));        }    }    @Override    publicvoidonBindViewHolder(RecyclerView.ViewHolder holder, intposition) {        if(holder instanceofTextViewHolder) {            ((TextViewHolder) holder).mTextView.setText(mTitles[position]);        } elseif(holder instanceofImageViewHolder) {            ((ImageViewHolder) holder).mTextView.setText(mTitles[position]);        }    }    @Override    publicintgetItemViewType(intposition) {        returnposition % 2== 0? ITEM_TYPE.ITEM_TYPE_IMAGE.ordinal() : ITEM_TYPE.ITEM_TYPE_TEXT.ordinal();    }    @Override    publicintgetItemCount() {        returnmTitles == null? 0: mTitles.length;    }    publicstaticclassTextViewHolder extendsRecyclerView.ViewHolder {        @InjectView(R.id.text_view)        TextView mTextView;        TextViewHolder(View view) {            super(view);            ButterKnife.inject(this, view);            view.setOnClickListener(newView.OnClickListener() {                @Override                publicvoidonClick(View v) {                    Log.d("TextViewHolder", "onClick--> position = "+ getPosition());                }            });        }    }    publicstaticclassImageViewHolder extendsRecyclerView.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(newView.OnClickListener() {                @Override                publicvoidonClick(View v) {                    Log.d("ImageViewHolder", "onClick--> position = "+ getPosition());                }            });        }    }    }</recyclerview.viewholder> | 
怎么样,是不是很简单,没错,就是这么简单,但是只要会了这个多Item,那么你就可以做出很多效果了,比如HeaderView和BottomView也是可以通过这种方式来实现的。(HeaderView Adapter)
##二、效果图如下:


最后给出代码下载地址–>Demo Code
    失败是什么?没有什么,只是更走近成功一步;成功是什么?就是走过了所有通向失败的路,只剩下一条路,那就是成功的路。
 
                    
                     
                    
                 
                    
                 
                
            
         
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号