首先先添加RecyclerView布局和它的子布局itemView,接下来为RecyclerView新建一个适配器adapter(这个适配器继承RecyclerView.Adapter,泛型是这个适配器Adapter.ViewHolder,其中ViewHolder是我们在这个适配器中定义的一个内部类.)
1.添加RecyclerView布局
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
2.添加RecyclerView子布局itemView
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
3.新建RecyclerView适配器Adapter
public class DemoAdapter extends RecyclerView.Adapter<DemoAdapter.MyViewHolder> {
}
自动生成一下代码(传递数据源的函数需要自己写)
/**
* 1.定义内部类MyViewHolder,通过findViewById()找到子布局中的实例
* 2.定义一个构造函数,用于把要展示的数据源传递进来,并赋值给一个去全局变量(额外手写的函数)
* 3.加载子布局,返回MyViewHolder实例
* 4.得到Demo实例,对MyViewHolder赋值
* 5.返回数据源长度
*/
public class DemoAdapter extends RecyclerView.Adapter<DemoAdapter.MyViewHolder> {
private List<String> mDemoList;
/**
*这个方法是自定义的ViewHolder,通过findViewById()找到子布局的实例
*/
public class MyViewHolder extends RecyclerView.ViewHolder {
private TextView textV;
public MyViewHolder(View itemView) {
//这个itemView通常是RecyclerView子项的最外层布局
super(itemView);
textV = itemView.findViewById(R.id.tv_textView);//找到布局中的实例
}
}
/**
*这个方法用于把数据源传递进来,并赋值给一个全局变量,后续都用这个数据源
*/
public DemoAdapter(List<String> strings) {
mDemoList = strings;
}
/**
*这个方法用于创建MyViewHolder实例,将子布局加载进来,返回MyViewHolder 实例
*/
@Override
public DemoAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_demo, parent, false);//将子布局加载进来
MyViewHolder viewHolder = new MyViewHolder(view);//创建myViewHolder实例,传入加载出的子布局
return viewHolder;//返回MyViewHolder 实例
}
/**
*这个方法用于对子项布局赋值,在每个子项被滚动到屏幕的时候执行
*/
@Override
public void onBindViewHolder(DemoAdapter.MyViewHolder holder, int position) {
String strings = mDemoList.get(position);//通过position参数得到当前项的数据实例
holder.textV.setText(strings);//设置数据到myViewHolder的控件中,这里只有TextView控件
}
/**
*这个方法用于返回数据源的长度
*/
@Override
public int getItemCount() {
return mDemoList.size();
}
}
4.使用RecyclerView
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*******************处理数据start*****************************/
List<String> strings = new ArrayList<>();
for (int i = 0; i < 200; i++) {
String str = "这是RecyclerView的第" + i + "个条目itemView";
strings.add(str);
}
/*******************处理数据end*****************************/
RecyclerView recyclerView = findViewById(R.id.rv_recycler_view);//找到RecyclerView控件
LinearLayoutManager linearLayout = new LinearLayoutManager(this);//创建布局管理器LinearLayoutManager
recyclerView.setLayoutManager(linearLayout);//设置布局管理器到RecyclerView中
DemoAdapter demoAdapter = new DemoAdapter(strings);//将数据传到DemoAdapter构造函数中
recyclerView.setAdapter(demoAdapter);//设置适配器(建立数据和适配器之间的联系)
}