Android开发

Android X + viewBindng + viewModel + kotlin 的初步使用

本文主要是介绍Android X + viewBindng + viewModel + kotlin 的初步使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

环境设置

要启用 Android X 下的 viewBindingviewModel ,首先要在需要启用的模块的 build.gradle 文件中添加 viewBinding 元素。

android {
    ...
    viewBinding {
        enabled = true
    }
}
复制代码

该功能要求 Android Studio 3.6 Canary 11 及更高版本 才能支持。

然后添加 viewModel 的依赖项。

implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0"
复制代码

写文章时最新稳定版本为 2.2.0 ,要获取当前最新版本,可前往 Lifecycle 处。

使用步骤

修改 layout 文件

使用 viewBinding 的 layout 文件格式如下:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
   <data>
       <variable name="user" type="com.example.User"/>
   </data>
   <LinearLayout
       android:orientation="vertical"
       android:layout_width="match_parent"
       android:layout_height="match_parent">
       <TextView
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="@{user.firstName}"/>
   </LinearLayout>
</layout>
复制代码
  1. 根标签需要是 <layout> ,原先的布局根标签需要改为 <layout> 的子标签。

  2. <data> 标签描述可以在 view 中访问的属性,通过 name 里的名称即可访问,<variable> 标签可以有复数个。

  3. 对于属性的访问使用 @{} 语法。

  4. 会自动为 layout 文件生成对应的 Binding 类,并通过驼峰法转换名称。如 layout 名称为 result_profile.xml ,对应的 Binding 类名称为 ResultProfileBinding

  5. 可以通过 binding.root 来直接访问根视图。如示例中的会返回 LinearLayout 根视图。

类与视图绑定

Activity 和 Fragment 绑定方法不同,需要根据类型调用相应的绑定方法。

Activity

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val binding = ViewmodelProfileBinding.inflate(layoutInflater)
    setContentView(binding.root)
    // 方法2: val binding: ViewmodelProfileBinding = DataBindingUtil.setContentView(this, R.layout.viewmodel_profile)
}
复制代码

Fragment

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    val binding = FragmentBillBinding.inflate(inflater, container, false)
    // 方法2:val binding: FragmentBillBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_bill, container, false)
    return binding.root
}
复制代码

可以通过 binding.xxx 来访问布局文件里对应的 view 。

viewModel 绑定

viewModel 在 2.2.0 版本中的创建方法和之前的有所不同,新的创建方法如下:

val viewModel: BillViewModel = ViewModelProvider(this)[BillViewModel::class.java]
复制代码

在 2.2.0 版本中,旧的 ViewModelProviders.of() 已经弃用,需要使用新的 ViewModelProvider 构造方法。详见 版本 2.2.0 。

创建好 viewModel 后需要在 Activity 或 Fragment 中将其与 view 绑定,绑定方法如下:

binding.viewModel = viewModel
binding.lifecycleOwner = this
复制代码
  1. 其中 binding.viewModel 需要在 layout 文件中 <data> 标签内预先声明,赋值时使用的 viewModel 属性如 android:text="@{viewModel.name}" 中的 name 需要是 LiveData 类型。

  2. 必须要声明 lifecycleOwner

绑定之后,viewModel.name 的变化会同步刷新 UI ,不需要再单独为其设置 observe

这篇关于Android X + viewBindng + viewModel + kotlin 的初步使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!