Android中RecyclerView的使用
在平常的Android开发当中免不了使用滑动控件,而RecycleView是一款非常流行的滑动控件,下面我们就来看看Recycle的具体使用吧:
RecyclerView的基本用法
1.RecyclerView是Android团队定义在support当中的一款控件,所以想要使用RecyclerView,就需要在项目当中的build.gradle中添加相应的依赖库
打开app/build.gradle,在dependencies中添加如下内容:
implementation 'com.android.support:recyclerview-v7:28.0.0'
添加完以后记得的要Sync一下,这样Android Studio才会将所需依赖库导入到项目当中去。
之后,我们需要在相关xml中写入RecyclerView,因为我是简单的练习,所以直接在activity_main.xml中写入了如下代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rlv_data"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
在xml中,可以自己指定空间的宽和高,因为我这里只是简单的应用,所以将宽和高设置成了铺满屏幕。
在这里,我们需要给RecyclerView准备一个实体类,为适配器适配做好准备,我这里新建了个Name的类,代码如下:
public class Name {
private String name;
private int imageId;
public Name(String name, int imageId) {
this.name =name;
this.imageId=imageId;
}
public int getImageId() {
return imageId;
}
public String getName() {
return name;
}
我们还需要再为它准备一个我们自定义的布局,再layout目录下新建一个item.xml。代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="10dp" />
<ImageView
android:id="@+id/img_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"/>
</LinearLayout>
接下来,我们需要为它设置一个适配器,我这里新建了一个DataAdapter的类,让他继承了RecyclerView.Adapter,并将泛型指定为DataAdapter.ViewHolder。其中DataAdapter.ViewHolder是我在DataAdapter中定义的一个内部类。代码如下:
public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> {
private List<Name> nameList;
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
ViewHolder holder = new ViewHolder(view);
return holder;
}
public DataAdapter(List<Name> nameList1){
nameList=nameList1;
}
//绑定数据的方法
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Name name=nameList.get(position);
holder.img_mame.setImageResource(name.getImageId());
holder.tv_name.setText(name.getName());
}
@Override
public int getItemCount() {
return nameList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
ImageView img_mame;
TextView tv_name;
//设置布局
public ViewHolder(@NonNull View itemView) {
super(itemView);
img_mame = itemView.findViewById(R.id.img_name);
tv_name = itemView.findViewById(R.id.tv_name);
}
}
}
适配器准备好以后,我们就可以使用RecyclerView了,再MainActivity中写下如下代码:
package com.example.myapplication;
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<Name> data=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
RecyclerView recyclerView=findViewById(R.id.rlv_data);
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);
DataAdapter adapterFregment=new DataAdapter(data);
recyclerView.setAdapter(adapterFregment);
}
private void initData() {
for (int i=0;i<3;i++){
Name apple=new Name("苹果",R.drawable.apple_pic);
Name banana=new Name("香蕉",R.drawable.banana_pic);
Name orange=new Name("橘子",R.drawable.orange_pic);
Name watermelon=new Name("西瓜",R.drawable.watermelon_pic);
Name pear=new Name("梨",R.drawable.pear_pic);
Name grape=new Name("葡萄",R.drawable.grape_pic);
Name pineapple=new Name("菠萝",R.drawable.pineapple_pic);
Name strawbaerry=new Name("草莓",R.drawable.strawberry_pic);
Name cherry=new Name("荔枝",R.drawable.cherry_pic);
Name mango=new Name("芒果",R.drawable.mango_pic);
data.add(apple);
data.add(banana);
data.add(orange);
data.add(watermelon);
data.add(pear);
data.add(grape);
data.add(pineapple);
data.add(strawbaerry);
data.add(cherry);
data.add(mango);
}
}
}
这样,我们的程序就完成了。稍后我会将运行效果更新出来,本文参考了郭霖大神的《第一行代码》。如有需要可以去看看:郭霖个人博客