BaseFragment
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) {
mView = inflater.inflate(getLayout(), container, false);
mViews = new SparseArray<>();
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();
}
void prepareFetchData() {
prepareFetchData(false);
}
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;
}
abstract int getLayout();
abstract void loadData();
}
网友评论