为什么 Android viewModels() 扩展函数在fragment-ktx而不是viewmodel-ktx库中可用?

Ely*_*lye 1 android kotlin android-gradle-plugin android-viewmodel

viewModels()当我如下使用时

class MainActivity : AppCompatActivity() {

    private val viewModel: MainViewModel by viewModels()

    // ... more codes
}
Run Code Online (Sandbox Code Playgroud)

为什么它可以在

implementation 'androidx.fragment:fragment-ktx:1.3.0'
Run Code Online (Sandbox Code Playgroud)

相反,当我包含如下内容时,它们在其中不可用?

implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.0'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.0'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
Run Code Online (Sandbox Code Playgroud)

我以为它应该在viewmodel-ktx图书馆而不是fragment-ktx图书馆

ian*_*ake 6

根据文档by viewModels()扩展是类的扩展Fragment,因此必须属于fragment-ktx工件 -lifecycle-viewmodel-ktx并且lifecycle-runtime-ktx对片段没有任何依赖性,并且该lifecycle-extensions工件已完全弃用,并且根据 Lifecycle 2.2 根本不应使用。 0 发行说明

  • 啊,你说的是“by ViewModels()”[“ComponentActivity”的扩展](https://developer.android.com/reference/kotlin/androidx/activity/package-summary#(androidx.activity.ComponentActivity) ).viewModels(kotlin.Function0))。这是在“activity-ktx”工件中,与片段无关。唯一的关系是“fragment-ktx”依赖于“activity-ktx”。 (2认同)