import android.os.Bundle;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.fragment.app.Fragment;
public abstract class BaseFragment extends Fragment{
boolean isViewInitiated=false;
boolean isVisibleToUser=false;
boolean isDataInitiated=false;
private SparseArray<View> mViews;
private View mView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (mView == null) mView = inflater.inflate(getLayout(), container, false);
mViews = new SparseArray<>();
initView();
return mView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
isViewInitiated = true;
prepareFetchData();
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
this.isVisibleToUser = isVisibleToUser;
prepareFetchData();
}
public void prepareFetchData() {
prepareFetchData(false);
}
public void prepareFetchData(boolean forceUpdate) {
if (isViewInitiated && isVisibleToUser && (!isDataInitiated || forceUpdate)) {
loadData();
isDataInitiated = true;
}
}
public <T extends View> T findView(int resId) {
View view=mViews.get(resId);
if (view == null) {
view = mView.findViewById(resId);
mViews.put(resId, view);
}
return (T)view;
}
@Override
public void onDestroy() {
super.onDestroy();
isViewInitiated = false;
isVisibleToUser = false;
isDataInitiated = false;
}
protected abstract int getLayout();
protected abstract void initView();
protected abstract void loadData();
}
BaseFragment
最新推荐文章于 2022-06-04 20:30:00 发布