Android开发 - RecyclerView 类长列表与网格视图展示详解
什么是RecyclerView
- RecyclerView 是 Android 的一个控件,用来展示长列表或网格的内容,它比以前的 ListView 更加灵活和高效
- 列表展示:想象你在手机上浏览一个长长的商品列表或图片网格。RecyclerView 就是用来展示这样的内容的控件
- 高效显示:如果你有一万件商品,RecyclerView 不会一次性把所有的商品都加载到内存里,而是只加载屏幕上可见的部分,这样可以节省内存和提高性能
主要涉及的组件
- RecyclerView:容器,用来放置你的列表或网格。它类似于一个显示大集合内容的框架
- LayoutManager:控制内容如何排列在屏幕上。例如,可以是垂直的列表、水平的列表、或者网格。常用的有:
- LinearLayoutManager:垂直或水平的单列/行列表
- GridLayoutManager:网格布局,可以显示多列
- StaggeredGridLayoutManager:不规则的瀑布流布局
- Adapter:适配器,提供数据和创建视图。想象你有一张展示不同商品的表格,Adapter 就是负责把每一行的商品展示出来
- ViewHolder:视图持有者。它用来缓存每一行的视图,以便提高滚动性能。滚动列表时 RecyclerView 不用重新创建每一行的视图,而是复用之前创建的视图
工作原理
-
视图复用:
- RecyclerView 会复用已经滚出屏幕的视图,而不是每次滚动时都重新创建新的视图。这种机制叫做视图回收(View Recycling)
-
数据绑定:
- 适配器(Adapter)负责将数据绑定到视图上。当 RecyclerView 需要显示新数据时,适配器会负责创建和绑定视图
RecyclerView的使用
-
假设你要在应用中展示一个商品列表,下面是如何设置 RecyclerView 的步骤:
-
创建主布局文件:
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent"/> </RelativeLayout>
-
创建自定义RecyclerView.Adapter类:
MyAdapter.java
import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; // 适配器将使用自定义 MyAdapter 的 ViewHolder 类 public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private final String[] mData; public MyAdapter(String[] data) { mData = data; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { // 创建一个新视图 View view = LayoutInflater.from(parent.getContext()) .inflate(android.R.layout.simple_list_item_1, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { // 绑定数据到视图 holder.textView.setText(mData[position]); } @Override public int getItemCount() { // 返回数据项的总数 return mData.length; } // 视图持有者类 static class ViewHolder extends RecyclerView.ViewHolder { final TextView textView; ViewHolder(View view) { super(view); textView = view.findViewById(android.R.id.text1); } } }
-
启动类
import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 获取 RecyclerView 控件 RecyclerView recyclerView = findViewById(R.id.recycler_view); // 设置布局管理器(垂直排列) recyclerView.setLayoutManager(new LinearLayoutManager(this)); // 设置适配器(提供数据) MyAdapter adapter = new MyAdapter(new String[] {"Item 1", "Item 2", "Item 3"}); recyclerView.setAdapter(adapter); } }
-
总结
- RecyclerView 是 Android 中用于高效展示长列表或网格数据的控件。它通过视图回收机制提高性能,提供了灵活的布局管理器,允许开发者自定义数据的展示方式。使用 RecyclerView 时需要设置布局管理器、适配器和视图持有者,以便管理和展示数据