参考:https://blog.csdn.net/qq_36486247/article/details/103959356
1.viewPager
List<LazyFragment> fragmentList=new ArrayList<>();
fragmentList.add(new MainFragment1(0));
fragmentList.add(new MainFragment1(1));
fragmentList.add(new MainFragment1(2));
fragmentList.add(new MainFragment1(3));
fragmentList.add(new MainFragment1(4));
ViewPager viewPager = findViewById(R.id.viewPager);
viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager(),FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
@NonNull
@Override
public Fragment getItem(int position) {
return fragmentList.get(position);
}
@Override
public int getCount() {
return fragmentList.size();
}
});
public abstract class LazyFragment extends Fragment {
private boolean isLoaded=false;
@Override
public void onResume() {
super.onResume();
if(!isLoaded && !isHidden()){
lazyInit();
isLoaded=true;
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
isLoaded=false;
}
public abstract void lazyInit();
}
2.viewPager2
ViewPager2 viewPager2 = findViewById(R.id.viewPager);
viewPager2.setAdapter(new FragmentStateAdapter(this) {
@NonNull
@Override
public Fragment createFragment(int position) {
return new MainFragment1(position);
}
@Override
public int getItemCount() {
return 5;
}
});
viewPager2.setOffscreenPageLimit(5);
public abstract class LazyFragment extends Fragment {
private Context mContext;
private boolean isFirstLoad = true; // 是否第一次加载
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = getActivity();
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = LayoutInflater.from(mContext).inflate(getContentViewId(), null);
initView(view);
return view;
}
@Override
public void onResume() {
super.onResume();
if (isFirstLoad) {
// 将数据加载逻辑放到onResume()方法中
initData();
initEvent();
isFirstLoad = false;
}
}
/**
* * 设置布局资源id
* *
* * @return
*
*/
protected abstract int getContentViewId();
/**
* * 初始化视图
* *
* * @param view
*
*/
protected void initView(View view) {
}
/**
* * 初始化数据
*
*/
protected void initData() {
}
/**
* * 初始化事件
*
*/
protected void initEvent() {
}
}