| package com.doumee.lib_coremodel.base; | 
|   | 
| import android.os.Bundle; | 
| import android.view.View; | 
|   | 
| import androidx.annotation.NonNull; | 
| import androidx.annotation.Nullable; | 
| import androidx.databinding.ViewDataBinding; | 
| import androidx.fragment.app.Fragment; | 
|   | 
| /** | 
|  * 懒加载Fragment | 
|  * @author <a href="mailto:jenly1314@gmail.com">Jenly</a> | 
|  */ | 
| public abstract class BaseLazyFragment<VM extends BaseViewModel,VDB extends ViewDataBinding> extends BaseFragment<VM,VDB> { | 
|     /** | 
|      * 是否可见 | 
|      */ | 
|     private boolean isVisible; | 
|     /** | 
|      * 是否初次加载 | 
|      */ | 
|     private boolean isFirstLoad; | 
|     /** | 
|      * 是否准备好加载 | 
|      */ | 
|     private boolean isPrepared; | 
|   | 
|     @Override | 
|     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { | 
|         isFirstLoad = true; | 
|         super.onViewCreated(view, savedInstanceState); | 
|         isPrepared = true; | 
|     } | 
|   | 
|     @Override | 
|     public void onResume() { | 
|         super.onResume(); | 
|         lazyLoad(); | 
|     } | 
|   | 
|     /** | 
|      * {@link Fragment}可见 | 
|      */ | 
|     private void onVisible(){ | 
|         isVisible = true; | 
|         lazyLoad(); | 
|     } | 
|   | 
|     /** | 
|      * {@link Fragment}不可见 | 
|      */ | 
|     private void onInvisible(){ | 
|         isVisible = false; | 
|     } | 
|   | 
|     @Override | 
|     public void onHiddenChanged(boolean hidden) { | 
|         super.onHiddenChanged(hidden); | 
|         if(hidden){ | 
|             onInvisible(); | 
|         }else{ | 
|             onVisible(); | 
|         } | 
|     } | 
|   | 
|     @Override | 
|     public void setUserVisibleHint(boolean isVisibleToUser) { | 
|         super.setUserVisibleHint(isVisibleToUser); | 
|         if(isVisibleToUser){ | 
|             onVisible(); | 
|         }else{ | 
|             onInvisible(); | 
|         } | 
|   | 
|     } | 
|   | 
|     /** | 
|      * 懒加载,触发{@link #onLazyLoad()} | 
|      */ | 
|     private void lazyLoad(){ | 
|         if(isFirstLoad && isPrepared && isVisible){ | 
|             //保证只加载一次 | 
|             isFirstLoad = false; | 
|             onLazyLoad(); | 
|         } | 
|     } | 
|   | 
|     /** | 
|      * 懒加载 | 
|      */ | 
|     public abstract void onLazyLoad(); | 
| } |