Android RecyclerView使用详解(二)
来源:互联网 发布:手机windows系统模拟 编辑:程序博客网 时间:2024/05/03 00:11
在上一篇(RecyclerView使用详解(一))文章中简单的介绍了RecyclerView的基本用法,接下来要来讲讲RecyclerView的更多用法,要实现不同的功能效果,大部分都还是在于RecyclerView的Adapter写法,所以我们着重来看看几种不同功能的Adapter写法。
一、多Item布局实现(MultipleItem)
如果之前你用过ListView实现过此功能,那么你一定对下面这两个方法并不陌生
@Override
public int getItemViewType(int position) {
returnsuper.getItemViewType(position);
}
@Override
public int getViewTypeCount() {
returnsuper.getViewTypeCount();
}
其中getItemViewType方法是用来获取当前项Item(position参数)是哪种类型的布局,getViewTypeCount方法是用来获取当前listview总共有多少种类型的布局。
如果你用RecyclerView,你会发现getViewTypeCount这个方法没有了,只有一个getItemViewType方法,用法和listview没有任何区别,这里要注意的就是这个函数onCreateViewHolder(ViewGroupparent, int viewType)这里的第二个参数就是View的类型,可以根据这个类型判断去创建不同item的ViewHolder。
publicclassMultipleItemAdapter extendsRecyclerView.Adapter<RecyclerView.ViewHolder> {
public static enumITEM_TYPE {
ITEM_TYPE_IMAGE,
ITEM_TYPE_TEXT
}
private finalLayoutInflater mLayoutInflater;
private finalContext 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, int viewType) {
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
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceofTextViewHolder) {
((TextViewHolder) holder).mTextView.setText(mTitles[position]);
} elseif (holder instanceofImageViewHolder){
((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 staticclassTextViewHolder extendsRecyclerView.ViewHolder {
@InjectView(R.id.text_view)
TextView mTextView;
TextViewHolder(View view) {
super(view);
ButterKnife.inject(this, view);
view.setOnClickListener(newView.OnClickListener(){
@Override
public void onClick(View v) {
Log.d("TextViewHolder","onClick-->position = "+ getPosition());
}
});
}
}
public staticclassImageViewHolder 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
public void onClick(View v) {
Log.d("ImageViewHolder","onClick-->position = "+ getPosition());
}
});
}
}
}
怎么样,是不是很简单,没错,就是这么简单,但是只要会了这个多Item,那么你就可以做出很多效果了,比如HeaderView和BottomView也是可以通过这种方式来实现的。(HeaderView Adapter)
- Android RecyclerView使用详解(二)
- Android RecyclerView使用详解二
- RecyclerView使用详解(二)
- RecyclerView使用详解(二)
- RecyclerView使用详解(二)
- RecyclerView使用详解(二)
- RecyclerView使用详解(二)
- RecyclerView使用详解(二)
- RecyclerView使用详解(二)
- 【Android】RecyclerView详解(二)
- Android RecyclerView 使用详解
- Android RecyclerView使用详解
- Android RecyclerView使用详解
- Android RecyclerView使用详解
- Android RecyclerView使用详解
- Android RecyclerView使用详解
- Android RecyclerView 详解(五) RecyclerView多布局的使用
- Android RecyclerView使用详解(一)
- 应用程序无法正常启动0xc000007b
- android中suid无效解决方法
- 机器视觉相关学习,博客推荐
- JSON与XML的区别比较
- 一些常见iOS面试常见的问题(一)
- Android RecyclerView使用详解(二)
- 多线程 : CountDownLatch 同步工具类 用法
- 大数据,并非一蹴而就
- JAVA学习路线
- HDU2577——How to Type 动态规划
- 局部变量和全局变量
- 深入理解RGBA、Math ceil()、floor()、round()、toFixed()随机数,取整方法
- 单一职责原则
- 【VS开发】VSTO 学习笔记(十)Office 2010 Ribbon开发