博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用LiveData和DataBinding进行双向绑定
阅读量:5977 次
发布时间:2019-06-20

本文共 2565 字,大约阅读时间需要 8 分钟。

hot3.png

使用LiveData和DataBinding进行双向绑定

1 引入依赖包

dependencies {    // ...    implementation "androidx.fragment:fragment:1.0.0"    implementation "androidx.lifecycle:lifecycle-viewmodel:2.0.0"    implementation "androidx.lifecycle:lifecycle-extensions:2.0.0"}

2 开启数据绑定

android {    dataBinding {        enabled = true    }}

3 建立模型

class AuthenticationInformation(val username: String = "", val encryptedPassword: String = "")

4 建立视图模型

class AuthenticationViewModel() : ViewModel() {    var authenticationInformation = MutableLiveData
() var username = "Alan" set(value) { field = value authenticationInformation.postValue(AuthenticationInformation(username, encryptPassword(password))) } var password = "" set(value) { field = value authenticationInformation.postValue(AuthenticationInformation(username, encryptPassword(password))) } private fun encryptPassword(originalPassword: String): String { // ... return "******" }}

5 更新布局

6 在Activity中建立绑定关系

class MainActivity : AppCompatActivity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        var binding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)        binding.authenticationViewModel = ViewModelProviders.of(this).get(AuthenticationViewModel::class.java)        binding.lifecycleOwner = this        binding.getAuthenticationViewModel()?.authenticationInformation?.observe(this, object: Observer
{ override fun onChanged(authenticationInformation: AuthenticationInformation) { Log.d("TEST", authenticationInformation.username) } }) }}

7 在Fragment中建立绑定关系

override fun onCreateView(        inflater: LayoutInflater, container: ViewGroup?,        savedInstanceState: Bundle?): View? {    var binding = ActivityMainBinding.inflate(inflater, container, false)    binding.authenticationViewModel = ViewModelProviders.of(activity)            .get(AuthenticationViewModel::class.java)    binding.lifecycleOwner = activity    binding.getAuthenticationViewModel()?            .authenticationInformation?            .observe(this, object: Observer
{ override fun onChanged(authenticationInformation: AuthenticationInformation) { Log.d("TEST", authenticationInformation.username) } }) return binding.root}

转载于:https://my.oschina.net/u/131191/blog/3053513

你可能感兴趣的文章
Azure Stack PaaS-网站(WebApp)背后是什么原理?
查看>>
新浪微博如何更近一步?
查看>>
2016! 新年快乐! 猴年快乐!
查看>>
SQL Server 2012 开发新特性:文件表
查看>>
《从0到1》杂感
查看>>
《Java从小白到大牛》之第14章 异常处理(下)
查看>>
Puppet基础篇9-Puppetmaster多环境配置
查看>>
Winform文件下载之WinINet
查看>>
iptables 运行逻辑及-I -A 参数解析
查看>>
百度百家号“漏洞”大曝光 一篇文章十几万阅读量 收入上万
查看>>
构建高性能.NET应用之配置高可用IIS服务器-第四篇 IIS常见问题之:工作进程回收机制(上)...
查看>>
ASP.NET 5系列教程 (三):view components介绍
查看>>
SEO独家干货:利用外链投票模型操作新站快速排名
查看>>
组策略设置服务器安-----禁用来宾用户
查看>>
【2014年计划】工作,学习两不误
查看>>
Gartner:2014年全球MSS市场分析
查看>>
从宁财神网购被骗谈可信网站必要性
查看>>
Lync Server 2013群聊天室创建和简单测试
查看>>
数据库正常运行,突然变慢的解决思路
查看>>
学习建议:如何做好研究[10 Steps Toward Better Research]
查看>>