说完了ViewModel该说说Activity了,毕竟ViewModel创建好了,还没有地方使用。
一、MVVM之Activity
之前的DemoActivity只是把xml用databinding绑定了,ViewModel的生命周期感知还没挂载到Activity中,于是就经过了这样一番改造。
public class DemoActivity extends AppCompatActivity {
protected ActivityDemoBinding mDataBinding;
protected AClass mViewModel;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initAAC();
}
/**
* 初始化AAC组件
*/
private void initAAC() {
mDataBinding = DataBindingUtil.setContentView(this, R.layout.activity_demo);
mViewModel = new ViewModelProvider(this, new ViewModelProvider.NewInstanceFactory()).get(AClass.class);
SparseArray<Object> variableSA = new SparseArray<>();
variableSA.put(BR.aClass, CastUtil.cast(new AClass()));
if (variableSA != null && variableSA.size() > 0) {
for (int i = 0; i < variableSA.size(); ++i) {
final int variableId = variableSA.keyAt(i);
final Object variableValue = variableSA.valueAt(i);
mDataBinding.setVariable(variableId, variableValue);
}
}
//让ViewModel拥有View的生命周期感应
if (mViewModel != null) {
getLifecycle().addObserver(mViewModel);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
//销毁DataBinding
if (mDataBinding != null) {
mDataBinding.unbind();
}
}
}
通过getLifecycle().addObserver(mViewModel);来给ViewModel注册生命周期感应。到此,基本的雏形就算搭建完成了。
网友评论