最近看到一句朋友圈发的摘抄,略有感触:
想不到吧,又该穿长袖了,你看,时间走得多快,可你,却还是一无所获。
疫情刚上班时,树叶都还没发芽,现在,叶子已经开始枯了。
你怕不怕,这辈子就是你上辈子说的下辈子!
我再次学习一下Jetpack:
接着《Android Jetpack简单介绍(二》继续说;
项目中自动生成的MainViewModel,它做作用是什么呢?我们点进ViewModel看看;源码就不贴出了,我们直接上源码中带的例子:
MainFragment
public class MainFragment extends Fragment {
private MainViewModel mViewModel;
private View mContentView;
public static MainFragment newInstance() {
return new MainFragment();
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
mContentView = inflater.inflate(R.layout.main_fragment, container, false);
initView();
return mContentView;
}
private void initView() {
TextView message = mContentView.findViewById(R.id.message);
message.setOnClickListener(view -> {
mViewModel.doAction();
});
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mViewModel = ViewModelProviders.of(this).get(MainViewModel.class);
// TODO: Use the ViewModel
mViewModel.getUser().observe(getActivity(), new Observer<User>() {
@Override
public void onChanged(@Nullable User data) {
// update ui.
}
});
}
}
MainViewModel
案例很简单,Jetpack中的ViewModel经典用法就是这样。
简单总结一下吧:
1、ViewModel旨在以生命周期意识的方式存储和管理用户界面相关的数据,它可以用来管理Activity和Fragment中的数据.还可以拿来处理Fragment与Fragment之间的通信等等.
2、当Activity或者Fragment创建了关联的ViewModel,那么该Activity或Fragment只要处于活动状态,那么该ViewModel就不会被销毁,即使是该Activity屏幕旋转时重建了.所以也可以拿来做数据的暂存.
当然,在实际开发中,也可以进行简单封装,便于使用,举个例子:
public class BaseViewModel extends ViewModel implements IViewModelAction {
private MutableLiveData<BaseActionEvent> actionLiveData;
protected LifecycleOwner lifecycleOwner;
public BaseViewModel() {
actionLiveData = new MutableLiveData<>();
}
@Override
public void startLoading(String message) {
BaseActionEvent baseActionEvent = new BaseActionEvent(BaseActionEvent.SHOW_LOADING);
baseActionEvent.setMessage(message);
actionLiveData.setValue(baseActionEvent);
}
@Override
public void dismissLoading() {
actionLiveData.setValue(new BaseActionEvent(BaseActionEvent.DISMISS_LOADING));
}
@Override
public void showSuccessToast(String message) {
BaseActionEvent baseActionEvent = new BaseActionEvent(BaseActionEvent.SHOW_SUCCESS_TOAST);
baseActionEvent.setMessage(message);
actionLiveData.setValue(baseActionEvent);
}
@Override
public void showFaillToast(String message) {
BaseActionEvent baseActionEvent = new BaseActionEvent(BaseActionEvent.SHOW_FAILL_TOAST);
baseActionEvent.setMessage(message);
actionLiveData.setValue(baseActionEvent);
}
@Override
public void finish() {
actionLiveData.setValue(new BaseActionEvent(BaseActionEvent.FINISH));
}
@Override
public void finishWithResultOk() {
actionLiveData.setValue(new BaseActionEvent(BaseActionEvent.FINISH_WITH_RESULT_OK));
}
@Override
public MutableLiveData<BaseActionEvent> getActionLiveData() {
return actionLiveData;
}
void setLifecycleOwner(LifecycleOwner lifecycleOwner) {
this.lifecycleOwner = lifecycleOwner;
}
}
这应该是最简单的例子了。就这样吧,如有错误,还望各位指出,共同进步;