最近看到一句朋友圈发的摘抄,略有感触:
想不到吧,又该穿长袖了,你看,时间走得多快,可你,却还是一无所获。
疫情刚上班时,树叶都还没发芽,现在,叶子已经开始枯了。
你怕不怕,这辈子就是你上辈子说的下辈子!
我再次学习一下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; } }
这应该是最简单的例子了。就这样吧,如有错误,还望各位指出,共同进步;