1、RecyclerView 导入方法
直接在build.gradle(Module)中添加依赖库
implementation 'com.android.support:recyclerview-v7:31+'
跟上面的版本号一致
2、list view样式recycle view
完成后的样子
2 .1 在新建项目下新建package包, 命名为RecycleView
在包中新建2个Activity. 命名为:RecycleViewActivity(放置按钮,查看不同的样式的列表)LinearRecycleViewActivity(线性垂直列表视图)
2.2 在activity_recycle_view下添加按钮,方便我们可以看到不同列表的视图
<?xml version="1.0" encoding="utf-8"?>
<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"
tools:context=".RecycleView.RecycleViewActivity"
android:orientation="vertical">
<Button
android:id="@+id/btn_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:backgroundTint="@color/blue"
android:text="查看列表视图"
android:textSize="18sp"
android:layout_gravity="center_horizontal"/>
</LinearLayout>
在RecycleViewActivity中获取控件,绑定监听器,点击按钮后实现页面跳转
//获取控件对象
btn = findViewById(R.id.btn_view);
//绑定监听器
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(RecycleViewActivity.this,LinearRecycleViewActivity.class);
startActivity(intent);
}
});
在线性垂直视图:activity_linear_recycle_view中添加RecycleView
<?xml version="1.0" encoding="utf-8"?>
<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"
tools:context=".RecycleView.LinearRecycleViewActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rl_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
在MainActivity中没有布局,所以将默认的mainactivity换成 RecycleViewActivity
点击按钮,完成页面跳转(状态栏的颜色在color里面修改就可以啦~)
2.3 新建一个Adapter,命名:LinearAdapter,继承 RecycleView.Adapter
Adapter有一个指定泛型,这个泛型继承自viewholder
2.4 创建LinearViewHolder继承自ViewHolder
viewholder的作用是因为Android有个recycle反复循环器,viewholder借助他来循环利用itemview,我们只需要重新填充view的数据,不需要再次创建view并加载到内存里面,这样就可以复itemview而避免频繁创建view导致的内存消耗了。
2.5 将viewholder 传给Adapter,根据报错修改参数类型和返回值
2.6 新建布局文件,命名为:layout_linear_item(放置在recycle view中显示的控件)
添加图片/文字(看你心情)
<?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="wrap_content"
android:orientation="vertical">
<ImageView
android:id="@+id/iv_item"
android:layout_width="wrap_content"
android:layout_height="200dp"
android:src="@drawable/layout_item"/>
</LinearLayout>
2.7 在LinearAdapter中创建构造函数,引用需要的布局文件
在onCreateViewHolder中返回所需要的item文件
设置item显示的数量
在viewholder子类构造函数中,获取item控件对象
LinearAdapter完整代码:
所有的代码我都把包名给删除了,之后如果复制代码的伙伴别忘记添加自己的包名哈~
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.recycleapplication.R;
public class LinearAdapter extends RecyclerView.Adapter<LinearAdapter.LinearViewHolder> {
//声明引用
private Context mContext;
private LayoutInflater mLayoutInflater;
//创建构造函数
public LinearAdapter(Context context){
this.mContext = context;
//通过LayoutInflater将控件的布局文件加载到当前类当中
mLayoutInflater = LayoutInflater.from(context);
}
@NonNull
@Override
//返回一个viewholder
public LinearViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new LinearViewHolder(mLayoutInflater.inflate(R.layout.layout_linear_item,
parent,false));
}
@Override
public void onBindViewHolder(@NonNull LinearViewHolder holder, int position) {
}
@Override
public int getItemCount() {
//返回的item数量
return 20;
}
class LinearViewHolder extends RecyclerView.ViewHolder{
private ImageView iv_item;
public LinearViewHolder(@NonNull View itemView) {
super(itemView);
//获取控件对象
iv_item = itemView.findViewById(R.id.iv_item);
}
}
}
在LinearRecycleViewActivity中绑定recycle view控件,设置线性布局管理器和适配器
LinearRecycleViewActivity完整代码
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import com.example.recycleapplication.R;
public class LinearRecycleViewActivity extends AppCompatActivity {
private RecyclerView rl_view;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_linear_recycle_view);
//绑定控件
rl_view = findViewById(R.id.rl_view);
//设置线性布局管理器
rl_view.setLayoutManager(new LinearLayoutManager(LinearRecycleViewActivity.this));
//设置adapter
rl_view.setAdapter(new LinearAdapter(LinearRecycleViewActivity.this));
}
}
完成
总结:这块看不懂的小伙伴可以自己梳理一下逻辑
1、创建一个Empty Activity 命名为RecycleViewActivity,添加按钮进行跳转
2、再创建一个Empty Activity 命名为LinearRecycleViewActivity,进行显示item
3、给LinearRecycleViewActivit创建适配器,命名为LinearAdapter
4、adapter需要循环item,viewholder继承RecyclerView.ViewHolder
5、将viewholder 传值给adapter
6、修改适配器函数参数与返回值
7、需要将添加了图片/文字的布局文件添加到recycle view中,所以创建构造函数,引用所需要的布局文件
8、设置item的数量
9、在viewholder子类构造函数中,获取引用布局文件控件
9、在LinearRecycleViewActivity中绑定recycle view控件,设置线性布局管理器和适配器
10、完成
3、水平列表视图
样式
3.1 新建水平activity:命名:LinearHorActivity
在布局文件中添加recycle view
<?xml version="1.0" encoding="utf-8"?>
<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"
tools:context=".RecycleView.LinearHorActivity"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rl_hor_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
给LinearHorActivity添加适配器,新建布局文件,命名为:LinearHorAdapter,layout_hor_item;
可复制之前创建的LinearAdapter和layout_linear_item
将需要展示的布局文件添加,更改控件ID
在LinearHorActivity设置线性布局器,将布局器的方向设置为水平
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import com.example.recycleapplication.R;
public class LinearHorActivity extends AppCompatActivity {
private RecyclerView rl_view;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_linear_hor);
rl_view = findViewById(R.id.rl_hor_view);
//生成一个LinearLayoutManager的对象
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(LinearHorActivity.this);
//设置这个线性布局管理器的方向,为水平方向
linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
//设置mHorRV的线性布局管理器
rl_view.setLayoutManager(linearLayoutManager);
//设置适配器:Adapter
rl_view.setAdapter(new LinearHorAdapter(LinearHorActivity.this));
}
}
3.2 在RecycleViewActivity的布局文件中添加按钮,实现页面的跳转
在RecycleViewActivity中添加监听事件
btn_hor.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(RecycleViewActivity.this,LinearHorActivity.class);
startActivity(intent);
}
});
完成
4、网格状recycle view
样式
4.1 新建Empty Activity 命名为 GridRecyclerViewActivity
在activity_grid_recycler_view中添加recycle view控件
<?xml version="1.0" encoding="utf-8"?>
<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"
tools:context=".RecycleView.GridRecyclerViewActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rl_grid"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/green"/>
</LinearLayout>
4.2 新建布局文件,命名为layout_grid_item
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:id="@+id/iv_grid_item"
android:layout_width="150dp"
android:layout_height="150dp"
android:src="@drawable/layout_grid_item"/>
<TextView
android:id="@+id/tv_grid_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="王一博"
android:layout_gravity="center_horizontal"
android:textSize="20sp"/>
</LinearLayout>
4.3 给GridRecyclerViewActivity添加适配器,命名为GridAdapter
创建子类GridViewHolder继承RecycleView.ViewHolder
将GridViewHolder传进去给Adapter,然后修改复写函数的返回值,和传入参数类型:
GridAdapter完整的代码
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.recycleapplication.R;
public class GridAdapter extends RecyclerView.Adapter<GridAdapter.GridViewHolder> {
private Context mContext;
private LayoutInflater mLayoutInflater;
//将所需要的布局加载进去
public GridAdapter(Context context){
this.mContext = context;
mLayoutInflater = LayoutInflater.from(context);
}
@NonNull
@Override
public GridViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//将所需要的布局文件加载到当前类当中
return new GridViewHolder(mLayoutInflater.inflate(R.layout.layout_grid_item,
parent,false));
}
@Override
public void onBindViewHolder(@NonNull GridViewHolder holder, int position) {
}
@Override
public int getItemCount() {
return 20;
}
//添加控件对象,获取item控件
class GridViewHolder extends RecyclerView.ViewHolder{
private ImageView iv_item;
private TextView tv_item;
public GridViewHolder(@NonNull View itemView) {
super(itemView);
iv_item = itemView.findViewById(R.id.iv_grid_item);
tv_item = itemView.findViewById(R.id.tv_grid_item);
}
}
}
4.4 在 GridRecyclerViewActivity中绑定recycle view控件,设置网格布局器和适配器
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import com.example.recycleapplication.R;
public class GridRecyclerViewActivity extends AppCompatActivity {
private RecyclerView rl_grid;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_grid_recycler_view);
//控件绑定
rl_grid = findViewById(R.id.rl_grid);
//设置布局管理器
rl_grid.setLayoutManager(new GridLayoutManager(GridRecyclerViewActivity.this,3));
//设置适配器
rl_grid.setAdapter(new GridAdapter(GridRecyclerViewActivity.this));
}
}
完成