版權聲明:本文為部落客原創文章,轉載請标明出處。 https://blog.csdn.net/chaoyu168/article/details/79217223
基類:
package fragment;
import android.support.v4.app.Fragment;
import android.view.View;
/**
* Created by xiaobai on 2018/1/31/031.
*/
public abstract class BaseFragment extends Fragment {
/**
* Fragment目前狀态是否可見
*/
public boolean isVisible;
/**
* inflate布局檔案 傳回的view
*/
public View mView;
/**
* 簡化 findViewById
*
* @param viewId
* @param <T>
* @return
*/
protected <T extends View> T find(int viewId) {
return (T) mView.findViewById(viewId);
}
/**
* setUserVisibleHint是在onCreateView之前調用的
* 設定Fragment可見狀态
*/
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
/**
* 判斷是否可見
*/
if (getUserVisibleHint()) {
isVisible = true;
onVisible();
} else {
isVisible = false;
onInvisible();
}
}
/**
* 可見
*/
private void onVisible() {
lazyLoad();
}
/**
* 不可見
*/
private void onInvisible() {
}
/**
* 延遲加載
* 子類必須重寫此方法
*/
public abstract void lazyLoad();
}
應用:
package fragment;
import android.content.pm.ApplicationInfo;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import com.android.xiaobai.R;
import java.util.List;
/**
* Created by xiaobai on 2018/1/31/031.
*/
public class AppFragment extends BaseFragment {
/**
* 标志位,标志已經初始化完成
*/
private boolean isPrepared;
/**
* 是否已被加載過一次,第二次就不再去請求資料了
*/
private boolean mHasLoadedOnce;
private List<ApplicationInfo> mAppList;
private ListView lv;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
if (mView == null) {
// 需要inflate一個布局檔案 填充Fragment
mView = inflater.inflate(R.layout.fragment_app, container, false);
initView();
isPrepared = true;
// 實作懶加載
lazyLoad();
}
//緩存的mView需要判斷是否已經被加過parent, 如果有parent需要從parent删除,要不然會發生這個mView已經有parent的錯誤。
ViewGroup parent = (ViewGroup) mView.getParent();
if (parent != null) {
parent.removeView(mView);
}
return mView;
}
/**
* 初始化控件
*/
private void initView() {
lv = find(R.id.lv);
}
@Override
public void lazyLoad() {
if (!isPrepared || !isVisible || mHasLoadedOnce) {
return;
}
//填充各控件的資料
mHasLoadedOnce = true;
}
}