Android MVVM+LiveData+ViewModel+EventBus简单创建

当创建项目首先点开app的gradle文件,在android{}里面添加如下

  

dataBinding {
    enabled = true
}
compileOptions {//lambda表达式需要
    targetCompatibility 1.8
    sourceCompatibility 1.8
}

databinding设置为可用,项目才可以帮我们自动生成databinding

然后在dependencies里添加

// EventBus
implementation 'org.greenrobot:eventbus:3.1.1'

// ViewModel and LiveData
implementation "android.arch.lifecycle:extensions:1.1.1"
annotationProcessor "android.arch.lifecycle:compiler:1.1.1"
// retrofit
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'

请求网络用到的Retrofit,是真的爽啊。。

接下来就拿MainActivity举例,在activity_main.xml父布局中windows版alt+enter,mac的我忘记了,command+enter好像,选择Convert to data binding layout,项目会自动生成一个ActivityMainBinding类。在MainActivity中直接引用就行,如下:

ActivityMainBinding binding;

原先OnCreate的setContentView修改为

binding = DataBindingUtil.setContentView(this, R.layout.activity_main);

至于怎么使用,就不在此做详细说明

创建ViewModel时候,我喜欢继承AndroidViewModel,在MainActivity中添加如下:

MainActivityViewModel viewModel;

同样,在OnCreate里加入:

viewModel = ViewModelProviders.of(this).get(MainActivityViewModel.class);

EventBus写接收时需要注意,在OnCreate()和OnDestory()分别注册和解除注册,如果不做接收者,则不要添加注册等,我第一次用就被坑过

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
    viewModel = ViewModelProviders.of(this).get(MainActivityViewModel.class);
    EventBus.getDefault().register(this);//EventBus注册

    EventBus.getDefault().post(new ModelEvent());//这个不需要注册就可执行
}
@Override
protected void onDestroy() {
    super.onDestroy();
    EventBus.getDefault().unregister(this);//EventBus解除注册
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(ModelEvent event) {
   //接收消息
}

我写了一个小的demo,MVVM+LiveData+ViewModel+EventBus 的项目放到了github上

有需要的小伙伴可以捧个场 

你可能感兴趣的