当前位置:网站首页>RecycleView的使用
RecycleView的使用
2022-08-01 21:15:00 【shuo277】
1.RecycleView是什么?
从Android 5.0开始,谷歌公司推出了一个用于大量数据展示的新控件RecylerView,可以用来代替传统的ListView,更加强大和灵活。
RecyclerView是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能,这一点从它的名字Recyclerview即回收view也可以看出。
RecyclerView 支持 线性布局、网格布局、瀑布流布局 三种,而且同时还能够控制横向还是纵向滚动。
1.2RecycleView的用法是什么?
布局文件:
1. 主布局文件中添加<RecycleView>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_view"
android:layout_width="match_parent"
android:layout_height="wrap_content" />2. 创建子项布局文件,并对其内部控件设置id
addressbook_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/lay_z">
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="240dp"
android:gravity="center"
android:text="TextView"
android:textSize="20sp" />
</RelativeLayout>代码:
1.创建实体类(如果有需求)
AddressBook.java
public class AddressBook {
private String name;
private int imageID;
public AddressBook(String name, int imageID) {
this.name = name;
this.imageID = imageID;
}
public String getName() {
return name;
}
public int getImageID() {
return imageID;
}
}2.创建适配器
AddressBookAdapter.java
public class AddressBookAdapter extends RecyclerView.Adapter<AddressBookAdapter.ViewHolder> {
private List<AddressBook> list;
public AddressBookAdapter(List<AddressBook> list){
this.list=list;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.addressbook_item, parent, false);
ViewHolder viewHolder=new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
AddressBook addressBook=list.get(position);
holder.AddressBookImage.setImageResource(addressBook.getImageID());
holder.AddressBookImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(view.getContext(), addressBook+"被点击", Toast.LENGTH_SHORT).show();
}
});
holder.AddressBookName.setText(addressBook.getName());
holder.view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(view.getContext(), addressBook.getName()+"被点击", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public int getItemCount() {
return list.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
View view;
ImageView AddressBookImage;
TextView AddressBookName;
public ViewHolder(@NonNull View itemView) {
super(itemView);
view=itemView;
AddressBookImage=itemView.findViewById(R.id.imageView);
AddressBookName=itemView.findViewById(R.id.textView2);
}
}
}3.在活动中创建并设置适配器
MainActivity2.java
public class MainActivity2 extends AppCompatActivity {
// 组合的数据存放的地方
private List<AddressBook> list=new ArrayList<>();
private RecyclerView rv_view;
//从服务器返回的结果数据
String[] names={"冰糖葫芦","汉堡","可乐","咖啡","首页","薯条","雪糕","肘子"};
int[] imgs={R.mipmap.bingtanghulu,R.mipmap.hanbao,R.mipmap.kele,R.mipmap.kafei,R.mipmap.shouye,R.mipmap.shutiao,R.mipmap.xuegao,R.mipmap.zhouzi};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
initData();
RecyclerView recyclerView=findViewById(R.id.rv_view);
//设置布局管理器
LinearLayoutManager layoutManager=new LinearLayoutManager(this);
recyclerView.addItemDecoration(new DividerItemDecoration(this,LinearLayoutManager.VERTICAL));
recyclerView.setLayoutManager(layoutManager);
AddressBookAdapter fruitAdapter=new AddressBookAdapter(list);
recyclerView.setAdapter(fruitAdapter);
}
private void initData() {
for (int i=0;i<names.length;i++){
AddressBook addressBook=new AddressBook(names[i],imgs[i]);
list.add(addressBook);
}
}
}4.在活动中设置排列方式及分隔线
//横向排列
layoutManager.setOrientation(layoutManager.HORIZONTAL);
//横向分割线
recyclerView.addItemDecoration(newDividerItemDecoration(this,LinearLayoutManager.VERTICAL);5.设置点击事件
在AddressBookAdapter.java类中修改

2.ViewPager2
2.1ViewPager2是什么?
ViewPager2 是基于 RecyclerView 实现的,自然继承了 RecyclerView 的众多优点,并且针对 ViewPager 存在的问题做了优化。
支持垂直方向的滑动且实现极其简单。
完全支持 RecyclerView 的相关配置功能。
支持多个 PageTransformer。
支持 DiffUtil,局部数据刷新和 Item 动画。
支持模拟用户滑动与禁止用户操作。
2.2 ViewPager2的用法?
布局文件:
1. 主布局文件中添加<ViewPager2>
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/vp_swiper"
android:layout_width="match_parent"
android:layout_height="240dp" />
2. 创建子项布局文件,并对其内部控件设置id
swiper_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/lay_z">
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="240dp"
android:gravity="center"
android:text="TextView"
android:textSize="20sp" />
</RelativeLayout>代码:跟上边差不多
1.创建实体类(如果有需求)
2.创建适配器
3.在活动中创建并设置适配器
4.在活动中设置排列方式及分隔线
5.设置点击事件
2.3MarginPageTransformer用来来设置页面间距
MarginPageTransformer pageTransformer = new MarginPageTransformer(20);
vp_imgs.setPageTransformer(pageTransformer);2.4CompositePageTransformer 与自定义 Transformer
//设置TransformerCompositePageTransformer
compositePageTransformer = new CompositePageTransformer();
//添加边距TransformercompositePageTransformer.addTransformer(new MarginPageTransformer(20));
//添加缩放效果的TransformercompositePageTransformer.addTransformer(newScaleInTransformer());
vp_imgs.setPageTransformer(compositePageTransformer);边栏推荐
- LeetCode每日一题(1807. Evaluate the Bracket Pairs of a String)
- Interview Blitz 70: What are sticky packs and half packs?How to deal with it?
- 15 分钟带你入门 Grafana
- Kubernetes 如何实现组件高可用
- Goroutine Leaks - The Forgotten Sender
- 微服务负载均衡器Ribbon
- LeetCode
- 包含吲哚菁绿的多聚体白蛋白纳米球/载马钱子碱纳米粒的牛血清白蛋白微球的制备
- C专家编程 前言
- 【微信小程序】【AR】threejs-miniprogram 安装(76/100)
猜你喜欢
随机推荐
PyQt5 + MySQL5.8 【学生信息管理系统】【增删改查】
网红驼背矫正产品真的管用吗?如何预防驼背?医生说要这样做
网络安全与基础设施安全局(CISA):两国将在网络安全方面扩大合作
位运算简介
LeetCode·每日一题·1374.生成每种字符都是奇数个的字符串·模拟
C Pitfalls and Defects Chapter 5 Library Functions 5.5 Library Function Signal
Graph adjacency matrix storage
方舟:生存进化PVE模式和PVP模式
LeetCode每日一题(1807. Evaluate the Bracket Pairs of a String)
关键字搜索:“淘宝商品 API ”
JS Improvement: Handwritten Publish Subscriber Model (Xiaobai)
Get started with Grafana in 15 minutes
技术栈概览
C Expert Programming Chapter 1 C: Through the Fog of Time and Space 1.4 K&R C
附录A printf、varargs与stdarg A.3 stdarg.h ANSI版的varargs.h
案例:MySQL主从复制与读写分离
C Pitfalls and Defects Chapter 7 Portability Defects 7.6 Memory Location 0
property语法
技能大赛训练:A部分加固题目
C Pitfalls and Defects Chapter 7 Portability Defects 7.11 An Example of a Portability Problem









