广州网站外包,编程软件是怎么做出来的,展厅设计公司logo,国家企业信息信用公信系统在Android开发中#xff0c;ViewModel与Activity的Binding并不是同一个概念#xff0c;它们分别指的是不同的功能和用途。
ViewModel:
ViewModel是一个为UI界面提供数据的类#xff0c;它负责管理Activity或Fragment的数据。ViewModel类持有数据的引用#xff0c;即使配置…
在Android开发中ViewModel与Activity的Binding并不是同一个概念它们分别指的是不同的功能和用途。
ViewModel:
ViewModel是一个为UI界面提供数据的类它负责管理Activity或Fragment的数据。ViewModel类持有数据的引用即使配置更改如屏幕旋转发生数据也不会丢失。ViewModel还可以帮助Activity和Fragment解耦使得它们更容易进行单元测试。 Activity的DataBinding:
Data Binding是一个支持库它允许你以声明方式绑定UI布局中的视图与应用程序数据源。这样可以在不使用findViewById()的情况下将UI和数据源连接起来。 区别
ViewModel主要用于数据持有而Activity的Binding主要用于UI和数据的绑定。 解决方案和实例代码
ViewModel的使用
在MVVM的框架中每一个Activity都应该对应一个ViewModel而现在我们有一个MyActivity
因此可以新建一个viewmodels包包下新建一个MyViewModel类表示与MyActivity进行绑定。
class MyViewModel : ViewModel() {private val _myLiveData MutableLiveDataString()val myLiveData: LiveDataString get() _myLiveDatafun updateData(data: String) {_myLiveData.value data}
}class MyActivity : AppCompatActivity() {private lateinit var viewModel: MyViewModeloverride fun onCreate(savedInstanceState: Bundle) {super.onCreate(savedInstanceState)viewModel ViewModelProviders.of(this).get(MyViewModel::class.java)viewModel.myLiveData.observe(this, Observer { data -// Update the UI})}
}
ViewModel是数据持久化的因为对于一些变量就可以直接放在ViewModel当中而不再放在Activity中可以根据一个实际的需求来进行。 Activity的Binding使用
layout xmlns:androidhttp://schemas.android.com/apk/res/androiddatavariablenameusertypecom.example.User//dataLinearLayoutandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentTextViewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text{user.name} /TextViewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text{user.email} //LinearLayout
/layout
注意这里要继承ViewModel 下面先将我们的Myctivity与MyViewModel进行绑定。
class MyActivity : AppCompatActivity() {private lateinit var binding: ActivityMyBindingoverride fun onCreate(savedInstanceState: Bundle) {super.onCreate(savedInstanceState)binding DataBindingUtil.setContentView(this, R.layout.activity_my)val user User(John Doe, johndoeexample.com)binding.user user}
}data class User(val name: String, val email: String) 在这个例子中 ViewModel用于管理数据 而Data Binding用于将数据绑定到UI上。 这样Activity就不需要直接操作UI元素数据和UI的变化可以被分离处理提高了代码的可维护性和可测试性。