文件:ReViewActivity.zip

一、导入RecyclerView依赖包

1.加入该包的名称,然后将sdk版本改成对应包的版本号,然后点击右上角的更新:

  1. implementation 'androidx.appcompat:appcompat:1.0.0'
  2. implementation 'androidx.recyclerview:recyclerview:1.0.0'

image.png

2.在activity_main中添加布局:

image.png

3.新建一个item_recycler_view.xml,为RecyclerView内的元素设定xml样式:

image.png

4.创建一个适配器的类RecyclerViewAdapterDemo:

(1)创建适配器类继承自RecyclerView.Adapter,泛型传入RecyclerView.ViewHolder类
image.png
(2)创建内部类的子类MyViewHolder,初始化控件
image.png
(3)重写RecyclerView.Adapter类的相关方法
image.png

5.在MainActivity中获取对象:

image.png

6.初始化数据:

image.png

7.适配器实例化:

image.png

8.设置LayoutManager(布局格式):

image.png

9.设置Adapter,把适配器的数据传入recyclerView:

image.png

二、代码整合:

1.activity_main的xml布局格式recyclerview代码:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. tools:context=".MainActivity">
  8. <androidx.recyclerview.widget.RecyclerView
  9. android:id="@+id/rv_demo"
  10. android:layout_width="match_parent"
  11. android:layout_height="match_parent">
  12. </androidx.recyclerview.widget.RecyclerView>
  13. </LinearLayout>

2.item_recycler_view.xml的布局内容代码:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="wrap_content"
  7. tools:context=".MainActivity">
  8. <TextView
  9. android:id="@+id/tv_test"
  10. android:layout_width="match_parent"
  11. android:layout_height="match_parent"
  12. android:gravity="center"
  13. android:text="测试"
  14. android:textSize="20sp"
  15. android:layout_marginRight="2dp"
  16. android:layout_marginLeft="2dp"
  17. android:layout_marginTop="2dp"
  18. android:layout_marginBottom="2dp"
  19. android:textColor="#E2583F"
  20. android:background="#7DAF45" />
  21. </LinearLayout>

3.RecyclerViewAdapterDemo的适配器代码:

  1. import android.content.Context;
  2. import android.view.LayoutInflater;
  3. import android.view.View;
  4. import android.view.ViewGroup;
  5. import android.widget.TextView;
  6. import androidx.annotation.NonNull;
  7. import androidx.recyclerview.widget.RecyclerView;
  8. import java.util.List;
  9. // 1.创建适配器类继承自RecyclerView.Adapter,泛型传入RecyclerView.ViewHolder类
  10. public class RecyclerViewAdapterDemo extends RecyclerView.Adapter
  11. <RecyclerViewAdapterDemo.MyViewHolder> {
  12. private Context context;
  13. private List<String> list;
  14. private View inflater;
  15. public RecyclerViewAdapterDemo(Context context,List<String> list){
  16. this.context=context;
  17. this.list=list;
  18. }
  19. //3.重写RecyclerView.Adapter类的相关方法
  20. @NonNull
  21. @Override
  22. public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
  23. inflater= LayoutInflater.from(context).inflate(R.layout.item_recycler_view,parent,false);
  24. MyViewHolder viewHolder=new MyViewHolder(inflater);
  25. return viewHolder;
  26. }
  27. @Override
  28. public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
  29. holder.tv_view.setText(list.get(position));
  30. }
  31. @Override
  32. public int getItemCount() {
  33. return list.size();
  34. }
  35. // 2.创建内部类即RecyclerView.ViewHolder类的子类MyViewHolder,并初始化item的控件。
  36. class MyViewHolder extends RecyclerView.ViewHolder{
  37. private TextView tv_view;
  38. public MyViewHolder(@NonNull View itemView) {
  39. super(itemView);
  40. tv_view=itemView.findViewById(R.id.tv_view);
  41. }
  42. }
  43. }

4.MainActivity的代码:

  1. import androidx.appcompat.app.AppCompatActivity;
  2. import androidx.recyclerview.widget.GridLayoutManager;
  3. import androidx.recyclerview.widget.LinearLayoutManager;
  4. import androidx.recyclerview.widget.RecyclerView;
  5. import android.content.Context;
  6. import android.os.Bundle;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9. public class MainActivity extends AppCompatActivity {
  10. // 1.获取RecyclerView对象
  11. private RecyclerView recyclerView;
  12. private RecyclerViewAdapterDemo adapterDemo;
  13. private Context context;
  14. private List<String> list;
  15. @Override
  16. protected void onCreate(Bundle savedInstanceState) {
  17. super.onCreate(savedInstanceState);
  18. setContentView(R.layout.activity_main);
  19. context=this;
  20. // 2.初始化数据
  21. recyclerView=findViewById(R.id.rv_demo);
  22. //3.适配器实例化
  23. list=new ArrayList<>();
  24. for (int i=0;i<10;i++){
  25. list.add("这是第"+i+"个测试");
  26. }
  27. adapterDemo=new RecyclerViewAdapterDemo(context,list);
  28. // 4.设置LayoutManager
  29. // GridLayoutManager manager=new GridLayoutManager(context,3);
  30. // manager.setOrientation(GridLayoutManager.VERTICAL);
  31. LinearLayoutManager manager=new LinearLayoutManager(context);
  32. manager.setOrientation(LinearLayoutManager.VERTICAL);
  33. recyclerView.setLayoutManager(manager);
  34. // 5. 设置Adapter
  35. recyclerView.setAdapter(adapterDemo);
  36. }
  37. }

5.结果图:

image.png

6.设置LayoutManager不同,布局样式不同(ps:这个是GridManager的布局格式):image.png

三、RecyclerView的另外一些使用

  1. mRecyclerView = findView(R.id.id_recyclerview);
  2. //设置布局管理器
  3. mRecyclerView.setLayoutManager(layout);
  4. //设置adapter
  5. mRecyclerView.setAdapter(adapter);
  6. //设置Item增加、移除动画
  7. mRecyclerView.setItemAnimator(new DefaultItemAnimator());
  8. //添加分割线
  9. mRecyclerView.addItemDecoration(new DividerItemDecoration(
  10. getActivity(), DividerItemDecoration.HORIZONTAL_LIST));