当前位置:网站首页>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);
边栏推荐
猜你喜欢
对C语言结构体内存对齐的理解
An online JVM FullGC made it impossible to sleep all night and completely crashed~
虚拟内存与物理内存之间的关系
测试的意义并不是能找到全部的缺陷
Graph adjacency matrix storage
R语言 线性回归的有关方法
使用员工管理软件,解锁人力生产力新水平,提高人力资源团队灵活性
Based on FPGA in any number of bytes (single-byte or multibyte) serial port (UART) to send (including source engineering)
ORI-GB-NP半乳糖介导冬凌草甲素/姜黄素牛血清白蛋白纳米粒的研究制备方法
漏洞分析丨HEVD-0x6.UninitializedStackVariable[win7x86]
随机推荐
TP5-NPs负载噻吩类化合物TP5白蛋白纳米粒/阿魏酸钠新糖牛血清蛋白纳米粒
【接口测试】JMeter调用JS文件实现RSA加密
C Pitfalls and Defects Chapter 7 Portability Defects 7.9 Case Conversion
网络安全与基础设施安全局(CISA):两国将在网络安全方面扩大合作
property语法
漏洞分析丨HEVD-0x6.UninitializedStackVariable[win7x86]
PyTorch笔记 - Attention Is All You Need (2)
技术栈概览
LeetCode
和我一起写一个音乐播放器,听一首最伟大的作品
Nacos 配置中心
LeetCode·32.最长有效括号·栈·动态规划
C陷阱与缺陷 附录B Koenig和Moo夫妇访谈
Hiking, cured my mental internal friction
STAHL touch screen repair all-in-one display screen ET-316-TX-TFT common faults
职场如象棋,测试/开发程序员如何突破成长瓶颈期?
那些关于DOM的常见Hook封装(一)
C Expert Programming Chapter 1 C: Through the Fog of Time and Space 1.4 K&R C
Record the first PR to an open source project
SkiaSharp 之 WPF 自绘 五环弹动球(案例版)