RecyclerView是Android5.0新特性,基本用法其实很简单,也没什么好说的,这里只是记录下让自己加深印象,先说一下我使用的工具:AndroidStudio3.0,接下来讲一下基本步骤
一、RecyclerView基本用法
1.首先需要在xml布局文件中使用RecyclerView,不过在3.0中貌似需要手动引入才能使用RecyclerView,手动引入其实最简单的方法就是在Module的grade文件中的dependencies{ }中加入一行代码:
implementation 'com.android.support:recyclerview-v7:26.1.0'
2.下来就是在你的Activity中findViewById找到你的控件,然后从这才算是RecyclerView真正开始使用了,第一步也是最容易忘记的一步:为你的RecyclerView设置LayoutManager(这里LayoutManager有多种样式,例如垂直,水平,网格,瀑布流)
LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
mRecyclerView.setLayoutManager(layoutManager);
3.给RecyclerView设置适配器,mList是使用for循环模拟添加的String数据
mRecyclerView.setAdapter(new MyAdapter(MainActivity.this, mList));
二、适配器
当然最重要的也就是适配器该如何写的问题了,这里直接给出完整代码:
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.TextView;
import java.util.List;
/**
* @author xiaochao
* @description RecyclerView适配器
* @time 2017/12/23 10:46
*/
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
//1.我们首先在MyAdapter中编写一个内部类MyViewHolder继承自RecyclerView.ViewHolder
class MyViewHolder extends RecyclerView.ViewHolder {
private TextView tv;
public MyViewHolder(View itemView) {
super(itemView);
tv = itemView.findViewById(R.id.tv);//此id为item布局中TextView的id
}
}
//2.让MyAdapter继承RecyclerView.Adapter<MyAdapter.MyViewHolder>,注意<>中是我们自定义的ViewHolder
private List<String> mList;
private Context mContext;
//3.通过构造函数传入数据与Context
public MyAdapter(Context context, List<String> stringList) {
mContext = context;
mList = stringList;
}
/**
* 加载条目布局
*
* @param parent
* @param viewType 可以根据这个值加载不同的布局
* @return RecyclerView中的每一个itemView
*/
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(mContext).inflate(R.layout.item_recyclerview, parent, false);
MyViewHolder viewHolder = new MyViewHolder(itemView);
return viewHolder;
}
/**
* 将视图与数据进行绑定
*
* @param holder 可以将其看成itemView,onCreateViewHolder方法中返回的就是MyViewHolder
* @param position
*/
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.tv.setText(mList.get(position));
}
/**
* @return 要显示多少个item
*/
@Override
public int ==getItemCount==() {
return mList.size();
}
}
三、RecyclerView踩坑
虽然说就上面的写法再基础不过了,但是还是有可能遇到坑的,我就亲身经历过。就是上面那几个基本步骤,代码也完全没有发现问题,但是在运行的时候却出错了。错误信息之前截的图片被删除了,也不想去复现了,大家在实际过程中不一定会遇到,如果遇到问题了,可以先看看是不是这个问题:RecyclerView的版本与自己Activity继承的AppCompatActivity版本不一致,将两个版本改成一致就可以了
,这也算是其中的一个小坑吧