咱們都知道,fragment放在viewPager裏面,viewpager會幫咱們預先加載一個,可是當咱們要看fragment裏面的內容時,咱們也許只會去看第一個,不會去看第二個,若是這時候不去實現fragment的懶加載的話,就會多餘的去加載一些數據,形成用戶多消耗流量,因此咱們採起懶加載的方式。android
所謂懶加載,就是當fragment徹底可見的時候咱們再去加載數據app
咱們知道,當咱們去滑動的時候,fragment會顯示與隱藏,當fragment徹底顯示在咱們的眼前時,fragment會調用一個方法ide
下面直接上代碼spa
首先,咱們定義一個抽象類去繼承咱們的fragment,code
1 package fragment; 2 3 import android.support.v4.app.Fragment; 4 5 /** 6 * Fragment懶加載 7 */ 8 public abstract class LazyFragment extends Fragment{ 9 10 protected boolean isVisible; 11 12 @Override 13 public void setUserVisibleHint(boolean isVisibleToUser) {//frahment從不可見到徹底可見的時候,會調用該方法 14 super.setUserVisibleHint(isVisibleToUser); 15 if (getUserVisibleHint()){ 16 isVisible = true; 17 onVisible(); 18 }else { 19 isVisible = false; 20 onInvisible(); 21 } 22 } 23 24 protected abstract void lazyLoad();//懶加載的方法,在這個方法裏面咱們爲Fragment的各個組件去添加數據 25 26 protected void onVisible(){ 27 lazyLoad(); 28 } 29 30 protected void onInvisible(){ 31 32 } 33 34 }
其實,咱們也能夠在咱們的fragment中直接去寫這些操做,可是寫成抽象類的話能夠很方便的讓咱們去複用,減小工做。blog
public class Fragment extends LazyFragment { private boolean isPrepared; // 標誌位,標誌已經初始化完成。 //在這個方法裏面去給咱們的Fragment添加數據 @Override protected void lazyLoad() { if (isPrepared && isVisible){ getNewsDate(getActivity(),channelId); page++; isPrepared = false; } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = LayoutInflater.from(getActivity()).inflate(R.layout.fragment, container, false); isPrepared = true; lazyLoad();//這裏咱們調用如下去加載咱們的數據 return view; }
這裏涉及到fragment的生命週期方法的調用順序,不知道的能夠去用Log打印一下看看繼承