A flexible view for providing a limited window into a large data set.用于大量数据展示的新控件
在使用RecyclerView时候,必须指定一个适配器Adapter和一个布局管理器LayoutManager
基本使用
1.创建布局文件
Item的布局文件
Activity布局文件
2.创建适配器
创建Adapter:创建一个继承RecyclerView.Adapter<VH>
的Adapter类
package com.sankuai.activitytest.recylerview;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.sankuai.activitytest.R;
import java.util.List;
/**
* Created by lijing81 on 2019/3/11.
*/
public class LinearAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context mContext;
private OnItemClickListener mListener;
// Adatper构造方法
public LinearAdapter(Context context,OnItemClickListener listener){
this.mContext=context;
this.mListener=listener;
}
// 继承RecyclerView的ViewHolder后需要完善的方法
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// item的layout关联上
if(viewType==0){
return new LinearViewHolder(LayoutInflater.from(mContext).inflate(R.layout.layout_linear_item,parent,false));
}
else{
return new LinearViewHolder2(LayoutInflater.from(mContext).inflate(R.layout.layout_linear_item_2,parent,false));
}
// return null;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
if(getItemViewType(position)==0){
((LinearViewHolder)holder).textView.setText("Hello World");
}
else {
((LinearViewHolder2)holder).textView.setText("你妹啊");
}
// 设置textView的文案
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.onClick(position);
}
});
}
@Override
// 设置数量
public int getItemCount() {
return 30;
}
@Override
public int getItemViewType(int position) {
if(position %2 ==0){
return 0;
}
else {
return 1;
}
// return super.getItemViewType(position);
}
//自定义ViewHolder类,继承RecyclerView的ViewHolder
class LinearViewHolder extends RecyclerView.ViewHolder{
private TextView textView;
//ViewHolder构造方法
public LinearViewHolder(View itemView) {
super(itemView);
// 把layout_linear_item的TextView绑定
textView=itemView.findViewById(R.id.tv_title);
}
}
class LinearViewHolder2 extends RecyclerView.ViewHolder{
private TextView textView;
private ImageView imageView;
//ViewHolder构造方法
public LinearViewHolder2(View itemView) {
super(itemView);
// 把layout_linear_item的TextView绑定
textView=itemView.findViewById(R.id.tv_title);
imageView=itemView.findViewById(R.id.tv_image);
}
}
//定义一个点击的接口
public interface OnItemClickListener{
void onClick(int pos);
}
}
创建ViewHolder:在Adapter中创建一个继承RecyclerView.ViewHolder
的静态内部类,可创建多个(绿色和橙色)
在Adapter中实现3个方法:
onCreateViewHolder()
onBindViewHolder()
getItemCount()
RecyclerView的组成:
- Layout Manager:Item的布局。
- Adapter:为Item提供数据。
- Item Decoration:Item之间的Divider