我正在为活动及其所有片段使用Single viewModel。
因此,如果必须在所有片段的const name = 'preceding_text_0_following_text';
const matcher = /(\d+)/;
// Replace with whatever you would like
const newName = name.replace(matcher, 'NEW_STUFF');
console.log("Full replace", newName);
// Perform work on the match and replace using a function
// In this case increment it using an arrow function
const incrementedName = name.replace(matcher, (match) => ++match);
console.log("Increment", incrementedName);
中编写此设置代码,则要初始化viewmodel
onActivityCreated
我正在浏览Android KTX扩展页面:(refer here)
我发现我可以像这样初始化视图模型:
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel = ViewModelProviders.of(activity!!).get(NoteViewModel::class.java)
}
因此我将以下依赖项添加到了gradle(app)中:
// Get a reference to the ViewModel scoped to this Fragment
val viewModel by viewModels<MyViewModel>()
// Get a reference to the ViewModel scoped to its Activity
val viewModel by activityViewModels<MyViewModel>()
但是当我尝试在应用程序中使用 //ktx android
implementation 'androidx.core:core-ktx:1.0.2'
implementation 'androidx.fragment:fragment-ktx:1.0.0'
implementation "androidx.lifecycle:lifecycle-extensions:2.0.0"
时,找不到它们的引用。
我希望获得有关如何使用这些扩展名的帮助,并提供一些我尝试搜索示例的基本示例。
答案 0 :(得分:3)
最后我们有了稳定的版本。
移到implementation 'androidx.fragment:fragment-ktx:1.1.0'
之后,我遇到了另一个问题。
无法将使用JVM target 1.8构建的字节码内联到以下字节码中 用JVM target 1.6构建的
compileOptions {
sourceCompatibility = 1.8
targetCompatibility = 1.8
}
kotlinOptions {
jvmTarget = "1.8"
}
应用上述所有方法后,问题已解决。
答案 1 :(得分:2)
尝试
implementation 'androidx.fragment:fragment-ktx:1.1.0-beta01'
答案 2 :(得分:1)
试试这个。它对我有用。
implementation "androidx.fragment:fragment-ktx:1.2.5"
答案 3 :(得分:0)
您使用此最新的Alpha版本:
dependencies {
implementation 'androidx.fragment:fragment-ktx:1.2.0-alpha01'
}
答案 4 :(得分:0)
扩展功能viewModels(...)已在版本1.1.0-alpha03中添加。因此,为了在您的应用程序中使用它,您将必须实现与1.1.0-alpah03或更高版本匹配的fragment-ktx。
我刚刚发现了这个问题,所以我选择使用1.1.0-rc01版,因为我不想使用alpha / beta版。
答案 5 :(得分:0)
请注意,您可以使用Koin来完成这项工作:
private val viewModel by viewModel<NoteViewModel>()
将使用导入
import org.koin.android.viewmodel.ext.android.viewModel
来自依赖项:
implementation "org.koin:koin-android-viewmodel:+"
//当您阅读此书时,将+更改为w / e是最新的
答案 6 :(得分:0)
您可以实施
implementation 'androidx.fragment:fragment-ktx:1.1.0'
实际上,KTX包中的BY viewModels实现看起来像这样,您也可以自己实现扩展功能
@MainThread
inline fun <reified VM : ViewModel> ComponentActivity.viewModels(
noinline factoryProducer: (() -> ViewModelProvider.Factory)? = null
): Lazy<VM> {
val factoryPromise = factoryProducer ?: {
val application = application ?: throw IllegalArgumentException(
"ViewModel can be accessed only when Activity is attached"
)
ViewModelProvider.AndroidViewModelFactory.getInstance(application)
}
return ViewModelLazy(VM::class, { viewModelStore }, factoryPromise)
}
答案 7 :(得分:0)
注意:这也适用于 Jetpack Compose
从 HERE 复制依赖项
目前 2021 June 5
的依赖如下:
dependencies {
val activity_version = "1.2.3"
// Java language implementation
implementation("androidx.activity:activity:$activity_version")
// Kotlin
implementation("androidx.activity:activity-ktx:$activity_version")
}
答案 8 :(得分:0)
对于谷歌员工:您的 Activity 应该继承 AppCompatActivity,而不是 Activity
答案 9 :(得分:0)
如果您想对视图模型使用 kotlin 委托,我认为您需要为您的活动建立这种依赖关系
//ViewModels delegation extentensions for activity
implementation 'androidx.activity:activity-ktx:1.3.1'