前言:本文主要记录学习Recylerview的基本概念以及使用方法。
Recylerview的概念
RecycleView是Android5.0后谷歌推出的一个用于在有限的窗口中展示大量数据集的控件,位于support-v7包中。由于目前androidx已经取代了supprot包,因此在此推荐大家使用Androidx的包。 Recylerview是一个和listView有些相似的列表结构控件,可以实现一些基本的列表的显示及事件内容。在谷歌Android官网,给Recylerview的描述是:Recylerview微件是ListView的更高级、灵活版本。 原因: RecyclerView可以自定义布局管理器来决定item的排布规则。比如LinearLayoutManager、GridLayoutManager、StaggeredGridLayoutManager 等。
Recylerview的优点
- 支持局部刷新。
- 可以自定义item增删时的动画。
- 能够实现item拖拽和侧滑删除等功能。
- 默认已实现View的复用,而且回收机制更加完善。
Recylerview的使用
1.包引入
在module下的build.gradle文件中引入依赖包。
implementation 'androidx.recyclerview:recyclerview:1.1.0'
2.设置布局文件
主要包括引入的布局文件将RecyclerView作为一个控件进行使用,还需要有item的布局文件进行显示列表各项内容。
Recyclerview在activity或者fragment中使用。布局文件代码如下:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/RecyclerList"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
列表中item显示内容的布局文件代码如下:
<?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"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_weight="3"
android:id="@+id/item_id"
android:layout_marginTop="20dp"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="miaowu"
android:textSize="20sp"/>
<Button
android:id="@+id/item_btn"
android:layout_marginTop="20dp"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="我喜欢"/>
</LinearLayout>
</LinearLayout>
3.adapter设置
设置item里的数据类,并且添加adapter类,设置item对应的类。
首先定义item的数据类:
public class fruits {
String name ;
String btn_item;
public fruits(String name, String btn_item) {
this.name = name;
this.btn_item = btn_item;
}
public fruits(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBtn_item() {
return btn_item;
}
public void setBtn_item(String btn_item) {
this.btn_item = btn_item;
}
@Override
public String toString() {
return "fruits{" +
"name='" + name + '\'' +
", btn_item='" + btn_item + '\'' +
'}';
}
}
添加对应的adapter类:
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.duanjiao.recylerviewdemo.R;
import com.duanjiao.recylerviewdemo.unity.fruits;
import java.util.List;
public class RecyclerAdpater extends RecyclerView.Adapter<RecyclerAdpater.ViewHolder>{
private List<fruits> fruits_List;
public RecyclerAdpater(List<fruits> fruits_List)
{
this.fruits_List = fruits_List;
}
@NonNull
@Override
public RecyclerAdpater.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
ViewHolder viewHolder = new ViewHolder(itemView);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull RecyclerAdpater.ViewHolder holder, int position) {
holder.name.setText(fruits_List.get(position).getName());
holder.btn_item.setText(String.valueOf(fruits_List.get(position).getBtn_item()));
}
@Override
public int getItemCount() {
return fruits_List.size();
}
class ViewHolder extends RecyclerView.ViewHolder{
TextView name;
Button btn_item;
public ViewHolder(@NonNull View itemView) {
super(itemView);
this.name = itemView.findViewById(R.id.item_name);
this.btn_item = itemView.findViewById(R.id.item_btn);
}
}
}
4.设置adapter和LayoutManager
主活动代码如下:
package com.duanjiao.recylerviewdemo;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import com.duanjiao.recylerviewdemo.adapter.RecyclerAdpater;
import com.duanjiao.recylerviewdemo.unity.fruits;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private RecyclerAdpater recyclerAdapter;
private LinearLayoutManager linearLayoutManager;
private List<fruits> fruits_List;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
init();
}
private void init() {
recyclerView = findViewById(R.id.RecyclerList);
linearLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerAdapter = new RecyclerAdpater(fruits_List);
recyclerView.setAdapter(recyclerAdapter);
}
private void initData() {
fruits_List = new ArrayList<>(20);
fruits_List.add(new fruits("苹果","我喜欢"));
fruits_List.add(new fruits("香蕉","我喜欢"));
fruits_List.add(new fruits("菠萝","我喜欢"));
fruits_List.add(new fruits("圣女果","我喜欢"));
fruits_List.add(new fruits("榴莲","我喜欢"));
fruits_List.add(new fruits("桃子","我bu喜欢"));
fruits_List.add(new fruits("火龙果","我喜欢"));
fruits_List.add(new fruits("红烧翅膀","我喜欢"));
fruits_List.add(new fruits("西瓜","我喜欢"));
fruits_List.add(new fruits("葡萄","我喜欢"));
fruits_List.add(new fruits("苹果","我喜欢"));
fruits_List.add(new fruits("香蕉","我喜欢"));
fruits_List.add(new fruits("菠萝","我喜欢"));
fruits_List.add(new fruits("圣女果","我喜欢"));
fruits_List.add(new fruits("榴莲","我喜欢"));
fruits_List.add(new fruits("桃子","我喜欢"));
fruits_List.add(new fruits("火龙果","我喜欢"));
fruits_List.add(new fruits("红烧翅膀","我喜欢"));
fruits_List.add(new fruits("西瓜","我喜欢"));
fruits_List.add(new fruits("葡萄","我喜欢"));
}
}
|