ViewModel的简单使用

环境AndroidStudio4.1.2 / Kotlin1.4.20  / ViewModel-2.2.0

引入依赖

def lifecycle_version = "2.2.0"
    implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
    implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version"

来看一下开发者文档里面关于viewModel的使用示例

这里为了简单起见,不引入liveData

创建自己的viewModel 继承自ViewModel类

class MainViewModel():ViewModel() {
    var counter=0
}

上图(注意红框区域)中可得知,推荐使用activity-ktx扩展库中的代理方式实例化viewModel

对应地址https://developer.android.google.cn/jetpack/androidx/releases/activity

引入activity-ktx库

def activity_version = "1.1.0"
    implementation "androidx.activity:activity-ktx:$activity_version"

1 --->>> 在activity中实例化viewModel  (无参实例化方式)

  private val viewModelWithOutInit:MainViewModel by viewModels()

context中获得实例后即可使用

 viewModelWithOutInit.counter++

2 --->>>有参实例化方式

private val viewModelWithOutInit:MainViewModel by viewModels()

点击进入上例行尾 viewModels 函数,可知通过该函数接收一个 实现了factory接口的自定义Factory对象 用于定制实例化方式 ,如下图

@MainThread
inline fun <reified VM : ViewModel> ComponentActivity.viewModels(
    noinline factoryProducer: (() -> Factory)? = null
): Lazy<VM> {
    val factoryPromise = factoryProducer ?: {
        defaultViewModelProviderFactory
    }

    return ViewModelLazy(VM::class, { viewModelStore }, factoryPromise)
}

创建viewModel工厂类并继承factory接口,构造方法中接收一个int类型的入参,通过create方法传递给ViewModel

class MainViewModelFactory(private val countReserved:Int):ViewModelProvider.Factory {
    override fun <T : ViewModel?> create(modelClass: Class<T>): T {
        return MainViewModel(countReserved) as T
    }
}

改写自定义ViewModel的构造方法

class MainViewModel(countReserved:Int):ViewModel() {
    var counter=countReserved
}

activity中实例化

  private val viewModel: MainViewModel by viewModels {
        MainViewModelFactory(100))
    }

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值