继JectPack架构学习系列一_ViewModel. 所有的用户界面数据放在ViewModel中管理, 还是不够. 每次数据改变的时候都需要驱动视图来驱动刷新控件. 比如用户按钮, 数据递增之后要改变数据 绑定数据. 那么ViewModel中的数据可以用LiveData来表示. 当数据发生改变的时候, 可以加一个观察者, 自动的刷新界面的数据, 从而减少交互, Controller即是界面就进一步减少了简化
首先, 定义ViewModel:
package com.hzhztech.livedatatest.viewmodel; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; public class ViewModelWithLiveData extends ViewModel { private MutableLiveData<Integer> liveDataNumber; public MutableLiveData<Integer> getLiveDataNumber() { if(liveDataNumber == null) { liveDataNumber = new MutableLiveData<>(); liveDataNumber.setValue(0); } return liveDataNumber; } public void addLiveDataNumber(int n) { liveDataNumber.setValue(liveDataNumber.getValue() + n); } }然后在Controller中使用
package com.hzhztech.livedatatest import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.ImageButton import android.widget.TextView import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProviders import com.hzhztech.livedatatest.viewmodel.ViewModelWithLiveData import kotlinx.android.synthetic.main.activity_main.* class MainActivity : AppCompatActivity() { lateinit var viewModelWithLiveData: ViewModelWithLiveData lateinit var textView:TextView lateinit var imageButton:ImageButton lateinit var imageButton2:ImageButton override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) textView = findViewById(R.id.textView) imageButton = findViewById(R.id.imageButton) imageButton2 = findViewById(R.id.imageButton2) viewModelWithLiveData = ViewModelProviders.of(this).get(ViewModelWithLiveData::class.java) //LifecyclerOwener activity就是拥有LifecyclerOwener的对象 //observe 之后也不需要取消观察, 在activity销毁之后 系统会自动取消销毁 viewModelWithLiveData.liveDataNumber.observe(this,object :Observer<Int> { override fun onChanged(t: Int?) { textView.text = t.toString() } }) imageButton.setOnClickListener { viewModelWithLiveData.addLiveDataNumber(1) } imageButton2.setOnClickListener { viewModelWithLiveData.addLiveDataNumber(-1) } } }observe函数非常关键
在控制器中对MutableLiveData 进行观察, 那么程序的独立性进一步得到了提升