栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

DataBinding的使用五

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

DataBinding的使用五

文章目录
  • 一、前言
  • 二、LiveData的使用
  • 三、ViewMode的使用
  • 四、参考链接

一、前言

DataBinding是JetPack的一部分,通常来说如果和JetPack的其它部分结合使用效果会更好,这里对其进行记录。之前说过如果想要使数据改变的时候实时刷新到UI上面需要使用Observable的子类才行,比如ObservableInt。这里介绍一下如果和LiveData、ViewMode结合使用刷新UI的情况

二、LiveData的使用

这里实现一个功能,将LiveData的数据绑定到UI上面,隔一段时间后更新该值,使其刷新UI

class UserViewModel: ViewModel() {
    val userName = MutableLiveData("默认值")
}
class MainActivity : AppCompatActivity() {
    private val binding: ActivityMainBinding by lazy {
        ActivityMainBinding.inflate(layoutInflater)
    }
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root)
        val viewModel = ViewModelProvider(this).get(UserViewModel::class.java)
        binding.viewmodel = viewModel
        binding.lifecycleOwner = this
        binding.root.postDelayed({
            viewModel.userName.value  = "更新值"
        },1000)
    }
}

activity_main.xml




    
        
    

    
        
    

三、ViewMode的使用

以下源自官方文档

您可以使用实现 Observable 的 ViewModel 组件,向其他应用组件发出数据变化通知,这与使用 LiveData 对象的方式类似。

在某些情况下,您可能更愿意使用实现 Observable 接口的 ViewModel 组件,而不是使用 LiveData 对象,即使这样会失去对 LiveData 的生命周期管理功能也不影响。使用实现 Observable 的 ViewModel 组件可让您更好地控制应用中的绑定适配器。例如,这种模式可让您更好地控制数据更改时发出的通知,您还可以指定自定义方法来设置双向数据绑定中的属性值。

如需实现可观察的 ViewModel 组件,您必须创建一个从 ViewModel 类继承而来并实现 Observable 接口的类。您可以使用 addOnPropertyChangedCallback() 和 removeOnPropertyChangedCallback() 方法提供观察器订阅或取消订阅通知时的自定义逻辑。您还可以在 notifyPropertyChanged() 方法中提供属性更改时运行的自定义逻辑。以下代码示例展示了如何实现一个可观察的 ViewModel:

该方式和自定义实现Observable类的方式差不多,示例如下

ViewModel

class ObservableUserModel : ViewModel(), Observable {
    private val callbacks: PropertyChangeRegistry = PropertyChangeRegistry()

    @Bindable
     var name = "默认值"

    fun updateName(newName : String){
        name = newName
        notifyPropertyChanged(BR.name)
    }

    override fun addOnPropertyChangedCallback(
        callback: Observable.OnPropertyChangedCallback) {
        callbacks.add(callback)
    }

    override fun removeOnPropertyChangedCallback(
        callback: Observable.OnPropertyChangedCallback) {
        callbacks.remove(callback)
    }

    
    fun notifyChange() {
        callbacks.notifyCallbacks(this, 0, null)
    }

    
    fun notifyPropertyChanged(fieldId: Int) {
        callbacks.notifyCallbacks(this, fieldId, null)
    }
}

activity_main.xml




    
        
    

    
        

    

MainActivity.kt

class MainActivity : AppCompatActivity() {
    private val binding: ActivityMainBinding by lazy {
        ActivityMainBinding.inflate(layoutInflater)
    }
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root)
        // Obtain ViewModel from ViewModelProviders
        val viewModel = ViewModelProvider(this).get(ObservableUserModel::class.java)
        binding.observableModel = viewModel
        binding.root.postDelayed({
            viewModel.updateName("新值--")
        },1000)
    }
}
四、参考链接
  1. 将布局视图绑定到架构组件  |  Android 开发者  |  Android Developers
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/820287.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号