Android——RecyclerView的使用
Posted CPPigSnail
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android——RecyclerView的使用相关的知识,希望对你有一定的参考价值。
RecyclerView
参考:《第一行代码》第二版——郭霖
可以用RecyclerView来显示多行列表。
recycle 循环回收再利用。
通过一个水果列表来学习RecyclerView
-
准备工作,在app/build.gradle文件中导入依赖
dependencies { implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.2.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.1' implementation 'androidx.recyclerview:recyclerview:1.0.0' testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' }
可以看到recyclerview在androidx里。
-
首先构建一个水果类,其中包括了要显示的水果内容——名称与图片
Fruit.java
package com.chinabird.recycler; public class Fruit { private String name; private int imageId; public Fruit(String name, int imageId) { this.name = name; this.imageId = imageId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getImageId() { return imageId; } public void setImageId(int imageId) { this.imageId = imageId; } }
-
在xml文件中加入Recyclerview,相当于容器装东西
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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" /> </LinearLayout>
-
写出fruit的xml布局,要显示的列表样式
fruit_item.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <!--水果图片--> <ImageView android:id="@+id/fruit_image" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <!--水果名称--> <TextView android:id="@+id/fruit_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginTop="10dp"/> </LinearLayout>
-
为RecyclerVirew准备一个适配器,适配的是fruit_item
package com.example.recycler; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import java.util.List; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; /** * 继承自RecyclerView.Adapter实现类,泛型是其内部类 */ public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> { /*全局Friut的List数组*/ private List<Fruit> mFruitList; /** * 构造器 */ public FruitAdapter(List<Fruit> mFruitList) { this.mFruitList = mFruitList; } /** * 内部类也继承其内部类,并重写构造器 */ static class ViewHolder extends RecyclerView.ViewHolder { ImageView fruitImage; TextView fruitName; /** * 内部类构造器 * * @param view Recycler子项的最外层布局 */ public ViewHolder(View view) { super(view); fruitImage = view.findViewById(R.id.fruit_image); fruitName = view.findViewById(R.id.fruit_name); } } /*第二个被回调,创建一个ViewHolder对象返回*/ @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { /*加载水果布局*/ View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item, parent, false); /*布局传递到内部类的构造函数中*/ ViewHolder holder = new ViewHolder(view); /*返回内部类对象*/ return holder; } /** * 子项数据赋值,通过这个方法实现滑动添加,第三个被回调 * * @param holder * @param position */ @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { /*得到当前fruit*/ Fruit fruit = mFruitList.get(position); /*更改图片*/ holder.fruitImage.setImageResource(fruit.getImageId()); /*更改文字*/ holder.fruitName.setText(fruit.getName()); } /** * @return 获取长度,第一个被回调 */ @Overrde public int getItemCount() { return mFruitList.size(); } }
-
在MainActivity中进行Recycler的显示,并调用适配器填充内容
package com.example.recycler; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import android.os.Bundle; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private List<Fruit> mFruitList = new ArrayList<Fruit>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initFruits(); /*找到activity_main.xml中的recyclerView*/ RecyclerView recyclerView = findViewById(R.id.recycler_view); /*指定RecyclerView布局方式*/ LinearLayoutManager layoutManager = new LinearLayoutManager(this); /*指定为LinearLayout布局*/ recyclerView.setLayoutManager(layoutManager); /*适配去管理滑动显示*/ FruitAdapter adapter = new FruitAdapter(mFruitList); /*设置适配*/ recyclerView.setAdapter(adapter); } /** * 初始化40个苹果数组 */ private void initFruits(){ for (int i = 0; i < 40; i++) { Fruit apple = new Fruit("Apple" + i, R.mipmap.ic_launcher); mFruitList.add(apple); } } }
以上是关于Android——RecyclerView的使用的主要内容,如果未能解决你的问题,请参考以下文章