【问题标题】:How do you create a viewmodel with a savedStateHandle and another argument?如何使用 savedStateHandle 和另一个参数创建视图模型?
【发布时间】:2023-02-16 18:02:53
【问题描述】:

这是我的视图模型

class ViewModel(private val savedStateHandle: SavedStateHandle, private val dataSource: DataSource) :ViewModel() 

这是我的 viewModelProvider 工厂

class ViewModelProviderFactory(
    private val savedStateHandle: SavedStateHandle,
    private val dataSource: DataSource
) : ViewModelProvider.Factory {
    override fun <T : ViewModel> create(modelClass: Class<T>): T {
        return ViewModel(savedStateHandle, dataSource) as T
    }
}

在主活动中

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding
    private val viewModel: ViewModel by viewModels()
...

我不知道如何将 savedStateHandle 传递给工厂,以便我可以创建一个 viewModel。

【问题讨论】:

标签: android viewmodel


【解决方案1】:

您可以使用ViewModelProvider.Factory的其他创建方法:

class ViewModelProviderFactory(
    private val dataSource: DataSource
) : ViewModelProvider.Factory {
    override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
        return ViewModel(extras.createSavedStateHandle(), dataSource) as T
    }
}

并且在通过by viewModels()语法初始化ViewModel时,不要忘记传递工厂参数:

private val viewModel: ViewModel by viewModels(factory = ViewModelProviderFactory(dataSource))

还有另一种方法可以避免使用 hilt 创建 ViewModelProvider.Factory 的麻烦,您可以参考此链接尝试 hilt:https://dagger.dev/hilt/view-model

【讨论】:

    猜你喜欢
    • 2018-07-30
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多