1.创建viewPaper2
<androidx.viewpager2.widget.ViewPager2
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:id="@+id/id_viewpager"/>
2.在oncreate里initPage(),
这段代码的作用是将四个具有不同标题的BlankFragment添加到ViewPager中,并通过自定义的适配器(MyFargmentAdapter
)将它们连接到ViewPager中,从而实现在ViewPager中切换不同的Fragment。
// 获取ViewPager实例
viewPager = findViewById(R.id.id_viewpager);
// 创建一个空的Fragment列表
ArrayList<Fragment> fragments = new ArrayList<>();
// 向Fragment列表中添加四个新实例化的BlankFragment,并分别传入不同的标题
fragments.add(BlankFragment.newInstance("聊天"));
fragments.add(BlankFragment.newInstance("通讯录"));
fragments.add(BlankFragment.newInstance("发现"));
fragments.add(BlankFragment.newInstance("我"));
// 创建自定义的Fragment适配器实例,传入FragmentManager和Fragment生命周期,以及之前创建的Fragment列表
MyFargmentAdapter pagerAdapter = new MyFargmentAdapter(getSupportFragmentManager(), getLifecycle(), fragments);
// 将适配器设置到ViewPager上,以便管理Fragment的加载和切换
viewPager.setAdapter(pagerAdapter);
这部分代码创建了一个新的MyFargmentAdapter实例,并传入了三个参数:
1.getSupportFragmentManager(): 这个方法获取了当前Activity中的FragmentManager实例。FragmentManager负责管理Fragment的添加、替换和事务等操作。在这里,FragmentManager用于管理ViewPager中的Fragment。
2.getLifecycle(): 这个方法获取了当前Activity的Lifecycle实例。Lifecycle用于管理组件(如Activity和Fragment)的生命周期状态,例如onCreate、onStart、onResume等。在这里,获取了Activity的生命周期,以确保Fragment的生命周期与Activity的生命周期同步。
3.fragments: 这个参数是一个Fragment列表,包含了要在ViewPager中显示的所有Fragment。这些Fragment将由适配器管理,并根据ViewPager的需求进行加载和销毁。
综合起来,new MyFargmentAdapter(getSupportFragmentManager(), getLifecycle(), fragments) 创建了一个用于管理ViewPager中Fragment的适配器实例,该适配器利用FragmentManager来管理Fragment的添加和替换,使用Activity的Lifecycle来同步Fragment的生命周期状态,并接受一个Fragment列表作为要在ViewPager中显示的内容。
1.find 2.创建java类名为MyfragmentAdapter,与空Fragment(BlankFragment)
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".BlankFragment">
<TextView
android:layout_width="match_parent"
android:gravity="center"
android:textSize="36sp"
android:textColor="@color/black"
android:id="@+id/frag_tv"
android:layout_height="match_parent"
android:text="@string/hello_blank_fragment" />
</FrameLayout>
3.处理BlankFragment,默认有两个参数,因为我们只需要改变一个String所以可以把Param2删除
package com.example.viewpagerandfragment;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class BlankFragment extends Fragment {
// 参数键
private static final String ARG_TEXT = "param1";
// 文本字符串
private String mTextString;
// 根视图
View rootView;
// 空构造函数
public BlankFragment() {
}
// 创建新实例的静态方法
public static BlankFragment newInstance(String param1) {
BlankFragment fragment = new BlankFragment();
Bundle args = new Bundle();
args.putString(ARG_TEXT, param1);
fragment.setArguments(args);
return fragment;
}
@Override
// 创建时调用
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 获取参数
if (getArguments() != null) {
mTextString = getArguments().getString(ARG_TEXT);
}
}
@Override
// 创建视图时调用
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// 如果根视图为空
if(rootView == null){
// 填充布局
rootView= inflater.inflate(R.layout.fragment_blank, container, false);
}
// 初始化视图
initView();
return rootView;
}
// 初始化视图的私有方法
private void initView() {
// 查找文本视图
TextView textView = rootView.findViewById(R.id.frag_tv);
// 设置文本
textView.setText(mTextString);
}
}
4.处理MyfragmentAdapter ,创建fragment数组,把四个fragment放到适配器里,这里可以返回他们的位置序号,和大小。
package com.example.viewpagerandfragment;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.lifecycle.Lifecycle;
import androidx.viewpager2.adapter.FragmentStateAdapter;
import java.util.ArrayList;
import java.util.List;
public class MyFargmentAdapter extends FragmentStateAdapter {
// Fragment 列表
List<Fragment> fragmentlist = new ArrayList<>();
// 构造函数
public MyFargmentAdapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle, List<Fragment> fragments) {
super(fragmentManager, lifecycle);
fragmentlist = fragments;
}
@NonNull
@Override
// 根据位置创建 Fragment
public Fragment createFragment(int position) {
return fragmentlist.get(position);
}
@Override
// 获取 Fragment 数量
public int getItemCount() {
return fragmentlist.size();
}
}