Android - 带着问题看源码之 ViewModel

// 注入数据参数fun provideUserViewModelFactory(): MyViewModelFactory {val repository = UserRepository.getInstance()return MyViewModelFactory(repository)}}// ViewModel 工厂类class MyViewModelFactory(private val userRepository: UserRepository,) : ViewModelPr
摘要由CSDN通过智能技术生成

// 注入数据参数

fun provideUserViewModelFactory(): MyViewModelFactory {

val repository = UserRepository.getInstance()

return MyViewModelFactory(repository)

}

}

// ViewModel 工厂类

class MyViewModelFactory(

private val userRepository: UserRepository,

) : ViewModelProvider.Factory {

@Suppress(“UNCHECKED_CAST”)

override fun create(modelClass: Class): T {

return MyViewModel(userRepository) as T

}

}

// ViewModel

class MyViewModel(private val userRepository: UserRepository ):ViewModel() {

private var userInfo: MutableLiveData? = null

fun getUserInfo(): LiveData? {

if (userInfo == null) {

userInfo = MutableLiveData()

loadUserInfo()

}

return userInfo

}

private fun loadUserInfo() {

this.userInfo = userRepository.getUserInfo()

}

}

// User 仓库

class UserRepository {

fun getUserInfo():MutableLiveData{

val user = MutableLiveData()

user.value = User(“张三”,“18”)

return user

}

companion object {

// For Singleton instantiation

@Volatile

private var instance: UserRepository? = null

fun getInstance() =

instance ?: synchronized(this) {

instance ?: UserRepository().also { instance = it }

}

}

}

// User 实体

data class User(val name:String,val age:String)

以上示例实现了数据和 UI 分离,并且ViewModel中没有持有View 接下来我们带着开头的几个问题,深入源码看看它是如何实现的。

[](()(1) 生命周期比组件的长如何实现


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值