我所搭建的MVVM设计模式的Android框架(五)

说完了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 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注册生命周期感应。到此,基本的雏形就算搭建完成了。

你可能感兴趣的:(我所搭建的MVVM设计模式的Android框架(五))