前言
最近工作的時候,用到ViewPager 結合Fragment做了一個類似網易新聞的數據展示界面,想做到只有在Fragment可見的時候,才做一次數據加載,故再次封裝了一個LazyFragment類,在此做個記錄。
package com.xes.online.revision.view.fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
/**
* Created by wwzhang on 2019/1/3
*/
public abstract class ReLazyFragment extends Fragment {
private boolean isCreate;
private View mRootView;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
if (mRootView == null) {
mRootView = View.inflate(getContext(), setLayoutId(), null);
initOthers(mRootView);
}
if (!isCreate && getUserVisibleHint()) {
onVisible();
}
return mRootView;
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (mRootView == null) {
return;
}
isCreate = true;
if (isVisibleToUser) {
onVisible();
}
}
/**
* fragment 可見回調 可以用數據加載
*/
public abstract void onVisible();
/**
* 設置contentview
*/
public abstract int setLayoutId();
/**
* @bref 初始化其他工具
*/
public abstract void initOthers(View mRootView);
}
總結:我使用的時候,是ViewPager結合FragmentPagerAdapter 使用,定義mRootView 爲了複用Fragment的view,對於Fragment此時的生命週期可參考FragmentPagerAdapter中Fragment的生命週期。希望對您有所幫助。