懒加载知识点:

我们经常在使用fragment时,常常会结合着viewpager使用,那么我们就会遇到一个问题,就是初始化fragment的时候,会连同我们写的网络请求一起执行,这样会非常消耗性能,最理想的方式是,只有用户点开或滑动到当前fragment时,才进行请求网络的操作。因此,我们就产生了一个懒加载这样一个说法。

一、压缩包

ViewPagerAndFragment.zip

二、Viewpager的使用流程

1.定义ViewPager

2.为ViewPager构建Adapter

3.实现适配器内的方法

三、ViewPager2的基本应用(viewpager2是由自定义的viewgroup实现的,recyclerview的分装)

1.微信界面:减少用户的操作

2.使用viewpager1和viewpager2的区别是什么?

答:viewpager2是由自定义的viewgroup实现的,viewpager2是recyclerview的分装

3.使用viewpager2的优点是什么?

答:viewpager2自带的功能是懒加载,懒加载的功能就是第一次使用到这个属性时才给这个属性对应的成员变量进行初始化,如果程序还没运行到这个地方就不进行相应的创建和初始化,这样就可以节省资源,提高性能。

4.实现viewpager2的具体步骤

(1)添加viewpager2的依赖包

image.png

(2)添加viewpager布局

image.png

(3)绑定布局,创建适配器对象,调用该适配器

image.png

(4)创建布局,作为容器

image.png

(5)实现适配器内的方法(注:背景颜色使用的属性为setBackgroundResource)

image.png

四、整体代码

1.viewpager依赖包

  1. implementation 'androidx.viewpager2:viewpager2:1.0.0'

2.布局activity_main.xml文件

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. tools:context=".MainActivity">
  8. <androidx.viewpager2.widget.ViewPager2
  9. android:id="@+id/vp_item"
  10. android:layout_width="match_parent"
  11. android:layout_height="match_parent"
  12. android:background="@color/colorPrimary">
  13. </androidx.viewpager2.widget.ViewPager2>
  14. </LinearLayout>

3.布局item_pager.xml文件

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. android:id="@+id/rl_item"
  8. android:gravity="center">
  9. <TextView
  10. android:layout_width="wrap_content"
  11. android:layout_height="wrap_content"
  12. android:id="@+id/tv_title"
  13. android:textColor="#F44336"
  14. android:text="hello"
  15. android:textSize="30dp"/>
  16. </RelativeLayout>

4.MainActivity文件代码

  1. package com.example.viewpagerandfragment;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import androidx.recyclerview.widget.RecyclerView;
  4. import androidx.viewpager2.widget.ViewPager2;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. public class MainActivity extends AppCompatActivity {
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.activity_main);
  12. ViewPager2 viewpager = findViewById(R.id.vp_item);
  13. ViewPagerAdapter viewPagerAdapter=new ViewPagerAdapter();
  14. viewpager.setAdapter(viewPagerAdapter);
  15. }
  16. }

5.ViewPagerAdapter文件代码

  1. package com.example.viewpagerandfragment;
  2. import android.view.LayoutInflater;
  3. import android.view.View;
  4. import android.view.ViewGroup;
  5. import android.widget.RelativeLayout;
  6. import android.widget.TextView;
  7. import androidx.annotation.NonNull;
  8. import androidx.recyclerview.widget.RecyclerView;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11. public class ViewPagerAdapter extends RecyclerView.Adapter<ViewPagerAdapter.ViewPagerHolder>{
  12. private List<String> list=new ArrayList<>();
  13. View inflate;
  14. public ViewPagerAdapter(){
  15. list.add("hello");
  16. list.add("I");
  17. list.add("like");
  18. list.add("you");
  19. }
  20. @NonNull
  21. @Override
  22. public ViewPagerHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
  23. inflate = LayoutInflater.from
  24. (parent.getContext()).inflate(R.layout.item_pager, parent, false);
  25. ViewPagerHolder viewPagerHolder = new ViewPagerHolder(inflate);
  26. return viewPagerHolder;
  27. }
  28. @Override
  29. public void onBindViewHolder(@NonNull ViewPagerHolder holder, int position) {
  30. holder.tv_title.setText(list.get(position));
  31. }
  32. @Override
  33. public int getItemCount() {
  34. return 4;
  35. }
  36. class ViewPagerHolder extends RecyclerView.ViewHolder{
  37. RelativeLayout rl_item;
  38. TextView tv_title;
  39. public ViewPagerHolder(@NonNull View itemView) {
  40. super(itemView);
  41. rl_item = itemView.findViewById(R.id.rl_item);
  42. tv_title = itemView.findViewById(R.id.tv_title);
  43. }
  44. }
  45. }

6.效果图:

(1)第一个页面

image.png

(2)滑动到第四个页面

image.png