Fragment基类
适用范围:
1.MVVM结构
2.Fragment与Activity共用一个ViewModel
public abstract class BaseFragment<M extends ViewModel, V extends ViewDataBinding> extends Fragment {
protected V mBinding;
protected M mViewModel;
protected FragmentActivity mContext;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
mBinding = DataBindingUtil.inflate(inflater,setLayout(), container, false);
mContext = requireActivity();
initViewModel();
setData(mViewModel);
mBinding.setLifecycleOwner(mContext);
initView(savedInstanceState);
initListener();
initViewObservable();
return mBinding.getRoot();
}
protected void initViewModel() {
Class<M> modelClass;
Type type = getClass().getGenericSuperclass();
if (type instanceof ParameterizedType) {
modelClass = (Class<M>) ((ParameterizedType) type).getActualTypeArguments()[0];
} else {
modelClass = (Class<M>) ViewModel.class;
}
mViewModel = new ViewModelProvider(requireActivity(),
new ViewModelProvider.NewInstanceFactory()).get(modelClass);
}
public abstract void initView(@Nullable Bundle savedInstanceState);
public abstract void initListener();
public abstract void initViewObservable();
public abstract int setLayout();
public abstract void setData(M viewModel);
public V getBinding() {
return mBinding;
}
public M getMusicViewModel() {
return mViewModel;
}
public NavController getNavController() {
return mNavController;
}
}