适用人群:Android开发人员。
本文内容:简要介绍RecycleView的使用。包括:初接触RecyclerView;设置布局管理器;
PS:之前ListView和GrideView的介绍都是Demo写好了直接粘贴代码,这次边自学边写。最后还是会附上全部代码的。并且,在学习RecycleView之前最好起码先去了解下ListView的使用。
备注:
1.Android数据列表之ListView的使用:https://www.jianshu.com/p/d32cb10d78d9
2.Android数据列表之GrideView的使用:https://www.jianshu.com/p/9aa90798c1fb
![](https://img.haomeiwen.com/i12338684/2d04772728c33404.png)
文章目录:
一、初接触RecyclerView
二、设置布局管理器LayoutManager
三、全部代码如下
一、初接触RecyclerView
使用步骤如下:
1. 新建项目。添加控件发现找不到RecyclerView?新建的工程是不包含RecyclerView控件的,需要导包。通过导入support-v7对其进行使用。
1)Windows版本AndroidStudio导包步骤:
![](https://img.haomeiwen.com/i12338684/4a7e81760864cc24.png)
![](https://img.haomeiwen.com/i12338684/f7318a72fe950c02.png)
![](https://img.haomeiwen.com/i12338684/0e62efe3e23dcf73.png)
![](https://img.haomeiwen.com/i12338684/d3e7859829ce4322.png)
2)Mac版本AndroidStudio导包步骤:
![](https://img.haomeiwen.com/i12338684/6308535dcb34bb6e.png)
![](https://img.haomeiwen.com/i12338684/6017a125a8ae1cee.png)
![](https://img.haomeiwen.com/i12338684/8802db9b989cc787.png)
![](https://img.haomeiwen.com/i12338684/b59a63b4770ac793.png)
2. 在activity_main.xml布局中删掉自带的“Hello world”TextView控件,添加一个RecyclerView控件。
新建项目默认的是约束布局ConstraintLayout,就以这种布局写。
控件id为recycler_view。
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent">
></android.support.v7.widget.RecyclerView>
3.创建一个适配器类MyRecyclerAdapter
GridView和ListView都是继承自BaseAdapter,但是RecyclerView不同,继承自RecyclerView.Adapter。右击包,新建java类,父类输入Adapter,会自动出来是recycler包下的Adapter,选择,创建。
![](https://img.haomeiwen.com/i12338684/625d5efff0167ec7.png)
![](https://img.haomeiwen.com/i12338684/741a7f1d811a32eb.png)
新建的类是空的,需要重写父类方法。
public class MyRecyclerAdapter extends RecyclerView.Adapter {
//在这里右击
}
如何重写父类方法?
在类花括号里面右击,后续步骤如下图:
![](https://img.haomeiwen.com/i12338684/73a164d6b5075a4f.png)
![](https://img.haomeiwen.com/i12338684/f2bd4b908be4ea56.png)
这里,我重写了一些必要的方法,其他方法根据业务需求去重写。
public class MyRecyclerAdapter extends RecyclerView.Adapter {
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
return null;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
}
@Override
public int getItemCount() {
return 0;
}
}
然后就是去添加list的item样式,再填充适配器内容了。
4.创建item布局文件recycler_item_layout.xml
作为Demo,在item里面就放一个文本TextView控件。这里读者可以任意书写。
创建步骤:
![](https://img.haomeiwen.com/i12338684/9a8bb0d032465f74.png)
![](https://img.haomeiwen.com/i12338684/8640b1ddb63e17de.png)
代码:
<?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">
<TextView
android:id="@+id/text_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Recycler View"
android:gravity="center"/>
</LinearLayout>
5.填充适配器内容MyRecyclerAdapter.java
public class MyRecyclerAdapter extends RecyclerView.Adapter {
private Activity mactivity;
public MyRecyclerAdapter(Activity activity) {
this.mactivity = activity;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
MyViewHolder holder = new MyViewHolder(LayoutInflater.from(mactivity).
inflate(R.layout.recycler_item_layout, viewGroup, false));
return holder;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
((MyViewHolder)viewHolder).tv.setText("我是第"+i+"个item");
}
@Override
public int getItemCount() {
return 20;
}
//创建一个内部类
class MyViewHolder extends RecyclerView.ViewHolder {
TextView tv;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
tv = itemView.findViewById(R.id.text_view);
}
}
}
6.修改MainActivity.java
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recycler_view);
recyclerView.setAdapter(new MyRecyclerAdapter(MainActivity.this));
recyclerView.setLayoutManager(new LinearLayoutManager(this));
}
}
7.修改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="50dp">
<!-- 修改item高度为50dp -->
<TextView
android:id="@+id/text_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Recycler View"
android:gravity="center"/>
</LinearLayout>
8.运行,查看效果
![](https://img.haomeiwen.com/i12338684/4edd6c92d0ab9b85.jpg)
完成。(全部代码看第三部分)
二、设置布局管理器LayoutManager
尝试修改LayoutManager
设置布局管理器LayoutManager:
recyclerView.setLayoutManager(LayoutManager layoutManager)
三个布局管理类:
- LinearLayoutManager:线性布局管理器
- StaggeredGridLayoutManager: 错列网格布局管理器
- GridLayoutManager:网格布局管理器
前面使用的是线性布局:
recyclerView.setLayoutManager(new LinearLayoutManager(this));
现在改成网格布局(2是列数,2列):
recyclerView.setLayoutManager(new GridLayoutManager(this, 2));
![](https://img.haomeiwen.com/i12338684/e5f786604895c2d4.jpg)
详述:
-
线性布局LinearLayoutManage(父类LayoutMananger)
构造方法:
//context上下文(实现的是默认的垂直布局)
LinearLayoutManager(Context context)
//context上下文,orientation布局显示方式,reverseLayout布尔值是否反转
LinearLayoutManager( Context context, int orientation, boolean reverseLayout)
备注:反转的垂直布局->数据从下到上加载,滑动从上往下,加载新数据,新数据在顶部
orientation:
LinearLayoutManager.HORIZONTAL
LinearLayoutManager.VERTICAL -
错列布局StaggeredGridLayoutManager(父类LayoutMananger)
构造方法:
//spanCount显示的列数,orientation显示的方向
StaggeredGridLayoutManager(int spanCount,int orientation) -
网格布局GridLayoutManager(父类LinearLayoutManager)
构造方法:
//context上下文环境,spanCount显示列数(默认显示垂直布局)
GridLayoutManager(Context context, int spanCount)
//context上下文环境,spanCount显示列数,orientation方向,reverseLayout是否反转
GridLayoutManager( Context context, int spanCount, int orientation, boolean reverseLayout)
完成。
三、全部代码如下:
四个文件: MainActivity.java、MyRecyclerAdapter.java、activity_main.xml、recycler_item_layout.xml。
MainActivity.java
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recycler_view);
recyclerView.setAdapter(new MyRecyclerAdapter(MainActivity.this));
recyclerView.setLayoutManager(new GridLayoutManager(this, 2));
//设置Item增加、移除动画
// recyclerView.setItemAnimator(new DefaultItemAnimator());
// //添加分割线
// recyclerView.addItemDecoration(new DividerItemDecoration(
// getActivity(), DividerItemDecoration.HORIZONTAL_LIST));
}
}
MyRecyclerAdapter.java
public class MyRecyclerAdapter extends RecyclerView.Adapter {
private Activity mactivity;
public MyRecyclerAdapter(Activity activity) {
this.mactivity = activity;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
MyViewHolder holder = new MyViewHolder(LayoutInflater.from(mactivity).
inflate(R.layout.recycler_item_layout, viewGroup, false));
return holder;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
((MyViewHolder)viewHolder).tv.setText("我是第"+i+"个item");
}
@Override
public int getItemCount() {
return 20;
}
//创建一个内部类
class MyViewHolder extends RecyclerView.ViewHolder {
TextView tv;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
tv = itemView.findViewById(R.id.text_view);
}
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent">
></android.support.v7.widget.RecyclerView>
</android.support.constraint.ConstraintLayout>
recycler_item_layout.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="50dp">
<TextView
android:id="@+id/text_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Recycler View"
android:gravity="center"/>
</LinearLayout>
完成。
后续会再补充更多RecyclerView的自定义。
网友评论