美文网首页
Android MVVM模式探讨

Android MVVM模式探讨

作者: 龙镇 | 来源:发表于2022-08-27 14:54 被阅读0次

众所周知Google在几年前就有了mvvm。但是国内用的项目好像不多,kotlin大家都追捧,但是mvvm没看到几个项目在用。

android的mvvm直接在app/build.gradle下加入以下代码即可:

buildFeatures { viewBinding true dataBinding true}

加入后即可使用,但是没看到有几个封装的好的框架。所以打算自己手撸一个框架。
首先是Activity,以下是它的代码片段:

public abstract class BaseActivity<K extends ViewDataBinding,V extends BaseActivityModel> extends AppCompatActivity {
    protected K binding;//只要你写了activity_main.xml,就会自己生成ActivityMainBinding
    protected V model;//这里需要自己生成一个viewModel

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(null);
        Log.i(this.getClass().getSimpleName(), "..........onCreate..........");

        binding = bindingInflate();
        setContentView(binding.getRoot());
        model = bindingModel();
        binding.setLifecycleOwner(this);
        binding.setVariable(getVariableId(),model);
        initData();
    }

    protected abstract int getVariableId();

    protected abstract V bindingModel();

    protected abstract int getTitleBarViewId();

    protected abstract void initData();

    protected abstract K bindingInflate();

    public K getBinding() {
        return binding;
    }
......

以下是activity_main.xml

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <data>
        <import type="com.yudun.futuresport.binding.ViewPager2BindingAdapter"/>
        <variable
            name="main"
            type="com.....viewmodel.activity.MainUIActivityModel" />
    </data>
    <androidx.constraintlayout.widget.ConstraintLayout
......

以下是BaseActivityModel

public class BaseActivityModel<T extends BaseActivity> {
    protected T activity;

    public BaseActivityModel(T activity) {
        this.activity = activity;
    }
}
......

现在来看看MainActivity里面有多简洁:

public class MainActivity extends BaseActivity<ActivityMainBinding, MainUIActivityModel> {


    @Override
    protected int getVariableId() {
        return BR.main;
    }

    @Override
    protected MainUIActivityModel bindingModel() {
        return new MainUIActivityModel(this);
    }

    @Override
    protected int getTitleBarViewId() {
        return 0;
    }


    @Override
    protected void initData() {
        model.initFragment(this);
        model.initDictionary();
    }

    @Override
    protected ActivityMainBinding bindingInflate() {
       return ActivityMainBinding.inflate(getLayoutInflater());
    }
......

页面交互代码则写在MainUIActivityModel里面。
更多代码请等待后续更新。

相关文章

网友评论

      本文标题:Android MVVM模式探讨

      本文链接:https://www.haomeiwen.com/subject/gbsfnrtx.html