Android X + viewBindng + viewModel + kotlin 的初步使用
2020/6/20 23:26:54
本文主要是介绍Android X + viewBindng + viewModel + kotlin 的初步使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
环境设置
要启用 Android X 下的 viewBinding
和 viewModel
,首先要在需要启用的模块的 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> 复制代码
-
根标签需要是
<layout>
,原先的布局根标签需要改为<layout>
的子标签。 -
<data>
标签描述可以在 view 中访问的属性,通过name
里的名称即可访问,<variable>
标签可以有复数个。 -
对于属性的访问使用
@{}
语法。 -
会自动为 layout 文件生成对应的 Binding 类,并通过驼峰法转换名称。如 layout 名称为
result_profile.xml
,对应的 Binding 类名称为ResultProfileBinding
。 -
可以通过
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 复制代码
-
其中
binding.viewModel
需要在layout
文件中<data>
标签内预先声明,赋值时使用的viewModel
属性如android:text="@{viewModel.name}"
中的name
需要是LiveData
类型。 -
必须要声明
lifecycleOwner
。
绑定之后,viewModel.name
的变化会同步刷新 UI ,不需要再单独为其设置 observe
。
这篇关于Android X + viewBindng + viewModel + kotlin 的初步使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-01-18android.permission.read_media_video
- 2024-01-18android_getaddrinfo failed eai_nodata
- 2024-01-18androidmo
- 2024-01-15Android下三种离屏渲染技术
- 2024-01-09Android 蓝牙使用
- 2024-01-06Android对接华为AI - 文本识别
- 2023-11-15代码安全之代码混淆及加固(Android)
- 2023-11-10简述Android语音播报TTS
- 2023-11-06Android WiFi工具类
- 2023-07-22Android开发未来的出路