Android中怎么使用RecyclerView滚动控件
RecyclerView是Android的一种滚动控件,可以用来显示列表等信息。它具有优秀的性能和灵活性,被广泛用于Android应用开发中。
本文将介绍如何在Android应用中使用RecyclerView滚动控件,包括以下内容:
1. 准备工作
2. 创建RecyclerView控件
3. 绑定数据源
4. 自定义布局
5. 添加点击事件
1. 准备工作
在开始使用RecyclerView之前,需要在Android项目中导入RecyclerView库。
在项目的build.gradle文件中添加以下代码:
dependencies {
implementation 'androidx.recyclerview:recyclerview:1.2.1'
}
然后同步项目即可。
2. 创建RecyclerView控件
在activity_main.xml中创建RecyclerView控件:
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
在MainActivity.java中找到RecyclerView控件,并设置布局管理器。常用的布局管理器有LinearLayoutManager、GridLayoutManager和StaggeredGridLayoutManager。
public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = findViewById(R.id.recycler_view);
//设置布局管理器为LinearLayoutManager
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(layoutManager);
}
}
3. 绑定数据源
RecyclerView控件需要一个适配器来绑定数据源。首先创建一个Person类来表示每个人的姓名和年龄。
public class Person {
private String mName;
private int mAge;
public Person(String name, int age) {
mName = name;
mAge = age;
}
public String getName() {
return mName;
}
public void setName(String name) {
mName = name;
}
public int getAge() {
return mAge;
}
public void setAge(int age) {
mAge = age;
}
}
然后创建一个PersonAdapter类,继承自RecyclerView.Adapter,在构造函数中传入一个Person数组作为数据源。
public class PersonAdapter extends RecyclerView.Adapter<PersonAdapter.ViewHolder> {
private Person[] mPersons;
public PersonAdapter(Person[] persons) {
mPersons = persons;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_person, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Person person = mPersons[position];
holder.mNameTextView.setText(person.getName());
holder.mAgeTextView.setText(String.valueOf(person.getAge()));
}
@Override
public int getItemCount() {
return mPersons.length;
}
static class ViewHolder extends RecyclerView.ViewHolder {
private TextView mNameTextView;
private TextView mAgeTextView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
mNameTextView = itemView.findViewById(R.id.name_text_view);
mAgeTextView = itemView.findViewById(R.id.age_text_view);
}
}
}
在activity_main.xml中添加item_person布局,用来显示每个人的姓名和年龄。
<?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"
android:padding="16dp">
<TextView
android:id="@+id/name_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp" />
<TextView
android:id="@+id/age_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp"
android:layout_marginStart="16dp" />
</LinearLayout>
最后在MainActivity.java中创建Person数组作为数据源,并将其传递给PersonAdapter。
public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = findViewById(R.id.recycler_view);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(layoutManager);
Person[] persons = new Person[]{
new Person("Tom", 24),
new Person("Jerry", 26),
new Person("Mike", 30),
};
PersonAdapter adapter = new PersonAdapter(persons);
mRecyclerView.setAdapter(adapter);
}
}
现在运行应用,RecyclerView就能够正常显示了。
4. 自定义布局
除了使用item_person布局来显示每个人的姓名和年龄,也可以创建其他的自定义布局。
例如,创建一个item_person_grid布局,用网格的方式显示每个人的姓名和年龄。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:gravity="center">
<TextView
android:id="@+id/name_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp"
android:textStyle="bold" />
<TextView
android:id="@+id/age_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp" />
</LinearLayout>
然后在PersonAdapter中修改onCreateViewHolder方法,使用item_person_grid布局。
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_person_grid, parent, false);
return new ViewHolder(view);
}
再次运行应用,RecyclerView就能够以网格的方式显示每个人的姓名和年龄了。
5. 添加点击事件
最后,为RecyclerView控件中的每个项添加点击事件。在PersonAdapter中添加一个接口OnItemClickListener,并在ViewHolder中为itemView设置点击事件。
public class PersonAdapter extends RecyclerView.Adapter<PersonAdapter.ViewHolder> {
private Person[] mPersons;
private OnItemClickListener mOnItemClickListener;
public PersonAdapter(Person[] persons) {
mPersons = persons;
}
public interface OnItemClickListener {
void onItemClick(Person person);
}
void setOnItemClickListener(OnItemClickListener onItemClickListener) {
mOnItemClickListener = onItemClickListener;
}
//...
static class ViewHolder extends RecyclerView.ViewHolder {
private TextView mNameTextView;
private TextView mAgeTextView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
mNameTextView = itemView.findViewById(R.id.name_text_view);
mAgeTextView = itemView.findViewById(R.id.age_text_view);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mOnItemClickListener != null) {
int position = getAdapterPosition();
mOnItemClickListener.onItemClick(mPersons[position]);
}
}
});
}
}
}
在MainActivity.java中为PersonAdapter设置OnItemClickListener。
public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = findViewById(R.id.recycler_view);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(layoutManager);
Person[] persons = new Person[]{
new Person("Tom", 24),
new Person("Jerry", 26),
new Person("Mike", 30),
};
PersonAdapter adapter = new PersonAdapter(persons);
adapter.setOnItemClickListener(new PersonAdapter.OnItemClickListener() {
@Override
public void onItemClick(Person person) {
Toast.makeText(MainActivity.this, "您点击了" + person.getName(), Toast.LENGTH_SHORT).show();
}
});
mRecyclerView.setAdapter(adapter);
}
}
现在每次点击RecyclerView中的项,都会弹出一个Toast提示信息,告诉您点击了哪个人的姓名。
