Recycler是Android在5.0版本之后提出的一个新的循环视图布局,已经在我们的开发中时常用到了。今天我对RecyclerView进行一下总结。这篇是Recycler的一些基础用法。
1.RecyclerView的依赖
implementation 'com.android.support:recyclerview-v7:28.0.0'
androidx中的依赖
implementation 'androidx.recyclerview:recyclerview:1.0.0'
根据具体环境大家进行选择
2.RecyclerView的常用方法
- setAdapter:设置列表项的适配器。适配器采用RecyclerView.Adapter。
- setLayoutManager:设置列表项的布局管理器,包括线性布局管理器LinearLayoutManager、网格布局管理器GridLayoutManageer、瀑布流网格布局管理器StaggeredGridLayoutManager。
- addItemDecoration:添加列表项的分割线。
- removeItemDecoration:移除列表项的分割线。
- setItemAnimator:设置列表项的增删动画。默认动画为系统自带的DefaltItemAnimator。
- addOnItemTouchListener:添加列表项的触摸监听器。因为RecyclerView没有实现列表项的点击接口,所以开发者可以通过这里的触摸监听器监控用户的手势。
- removeOnItemTouchListener:移除列表项的触摸监听器。
- scorllToPosition:滚动到指定位置。
3.RecyclerView.Adapter相关方法
<1>自定义适配器必须要重写的方法
- getItemCount:获取列表项的数目。
- onCreateViewHolder:创建整个布局的视图持有者。输入参数中包括视图类型,可根据视图类型加载不同的布局,从而实现带头部的列表布局。
- onBindViewHolder:绑定每项的视图持有者。
<2>可以重写也可以不重写的方法
- getItemViewType:返回每项的视图类型。这个视图类型供onCreateViewHolder方法使用。
- getItemId:获得每项的编号。
<3>可以直接调用的方法
- notifyItemInserted:通知适配器在指定位置已插入新项。
- notifyItemRemoved:通知适配器在指定位置已删除原有项。
- notifyItemChanged:通知适配器在指定位置的项目已发生变化。
- notifyDataSetChanged:通知适配器整个列表的数据已发生变化。
4.使用示例
视图布局 activity_main.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="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none"/>
</LinearLayout>
列表项布局 item_recycler.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="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/iv"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:src="@mipmap/aaa" />
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="10dp"
android:text="这是一行文字"
android:textColor="#000000"
android:textSize="20sp" />
</LinearLayout>
<View
android:id="@+id/view"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/darker_gray"
android:layout_marginTop="5dp"/>
</LinearLayout>
适配器 HomeAdapter.java
public class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder>{
private Context mContext;
public HomeAdapter(Context mContext) {
this.mContext = mContext;
}
/**
* 引入布局
* @param viewGroup
* @param i
* @return
*/
@Override
public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
MyViewHolder holder = new MyViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_recycler,viewGroup,false));
return holder;
}
/**
* 为控件绑定数据
* @param myViewHolder
* @param i
*/
@Override
public void onBindViewHolder(MyViewHolder myViewHolder, int i) {
myViewHolder.tv.setText("这是第"+i+"行");
if (i%2 == 0){
myViewHolder.iv.setImageResource(R.mipmap.aaa);
}else{
myViewHolder.iv.setImageResource(R.mipmap.bbb);
}
if (i == 19){
myViewHolder.view.setVisibility(View.GONE);
}else{
myViewHolder.view.setVisibility(View.VISIBLE);
}
}
/**
* 返回项个数
* @return
*/
@Override
public int getItemCount() {
return 20;
}
/**
* 定义控件并初始化
*/
class MyViewHolder extends RecyclerView.ViewHolder{
TextView tv;
ImageView iv;
View view;
public MyViewHolder(View itemView) {
super(itemView);
tv = itemView.findViewById(R.id.tv);
iv = itemView.findViewById(R.id.iv);
view = itemView.findViewById(R.id.view);
}
}
}
Activity中的使用配置 MainActivity.java
public class MainActivity extends AppCompatActivity {
private RecyclerView recycler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recycler = findViewById(R.id.recycler);
//设置布局管理器
recycler.setLayoutManager(new LinearLayoutManager(this));
//设置item增加和删除时的动画
recycler.setItemAnimator(new DefaultItemAnimator());
HomeAdapter mAdapter = new HomeAdapter(this);
recycler.setAdapter(mAdapter);
}
}
这样最简单的一个RecyclerView的使用就完成了。之后还会介绍一些其他的使用方法。