小编Arc*_*nes的帖子

创建我自己的 ViewModelStore 来控制 ViewModel 生命周期

谷歌示例中指出,要在片段之间进行通信,您可以ViewModel使用Activity. 这种方法的问题在于,它将ViewModel持续到被Activity摧毁为止。

在单个Activity应用程序中,这意味着 Activity 将充斥着ViewModel可能不再需要的 s。ViewModel如果这些状态没有被正确清除,你也会遇到状态问题。

因此,我研究了如何改变 的生命周期,ViewModel这样我就不必受Activity生命周期的束缚,但可以比 的生命周期更长Fragment。这对于屏幕的多步骤/事务流非常有用,其中在屏幕流过程中满足了需求。

所以基本上,我希望 ViewModel 的范围小于活动但比片段长。

为了实现这一目标,我创建了自己的ViewModelStore并在配置中持久化它,就像FragmentActivity持久化它自己的ViewModelStore. 然后在初始化视图模型时我将使用,

ViewModelProvider(myCustomViewModelStore, myFactory).get(SomeViewModelClass::class.java)

由于ViewModel的范围不属于我的自定义范围ViewModelStore,因此我可以轻松调用viewModelStore.clear()来控制 的生命周期ViewModel

我想知道这是否是一个好主意以及是否有人使用相同的想法。

提前致谢!

android android-viewmodel android-architecture-components

5
推荐指数
1
解决办法
1174
查看次数

liveData builder 功能解决了什么问题?

因此有一个新的构建器函数LiveData

val someLiveData = liveData {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

谁能准确解释这个新的构建器功能解决了什么问题?它如何解决轮换问题?它与 Web 服务调用有何关系?

任何意见将不胜感激。提前致谢。

android kotlin android-livedata kotlin-coroutines

5
推荐指数
1
解决办法
671
查看次数

如何使用 Object Animator 制作放大动画

当使用动画时,我可以做这样的事情

ScaleAnimation animation = new ScaleAnimation(0, 1.0, 0, 1.0, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
Run Code Online (Sandbox Code Playgroud)

从 0 缩放到对象的原始大小。

我怎样才能对ObjectAnimatoror做同样的事情ValueAnimator

android android-animation objectanimator

4
推荐指数
1
解决办法
6523
查看次数

如何在 kotlin 原生中使用 swift 库?

如何在 Kotlin/Native 中使用 Swift 库?

我正在尝试使用 cinteropt 来使用 Objective-c 库,Kotlin/Native但我似乎无法弄清楚如何使用 swift 库?

有人可以在这里指导我吗?提前致谢。

kotlin kotlin-native kotlin-multiplatform

4
推荐指数
1
解决办法
506
查看次数

Jetpack Compose:Modifier.heightIn(...) 与 Modifier.preferredHeight(...) 之间有什么区别

Modifier.heightIn(...)和 和有什么区别Modifier.preferredHeight()?在我的试验中,它们似乎以相同的方式工作。有谁知道何时使用什么以及在什么情况下使用?

android android-jetpack-compose

4
推荐指数
1
解决办法
1991
查看次数

如何抑制协程流程中的错误,使流程无法完成?

我有一个可能会抛出错误的流程,如下所示:

val myFlow = flow {
    emit("1")
    delay(2000)
    emit("2")
    delay(2000)
    emit("3")
    delay(2000)
    emit("4")
    delay(2000)
    throw Exception() // here it would throw an error
    delay(10000)
    emit("6")  // because the flow completes on error, it doesn't emit this
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,当抛出错误时,即使我添加.catch { error -> emit("5") }.. 它仍然完成流程,因此"6"不会发出。

myFlow.catch { error ->
    emit("5")
}.onEach {
    println("$it")
}.onCompletion {
    println("Complete")
}.launchIn(scope)
Run Code Online (Sandbox Code Playgroud)

结果是:

1
2
3
4
5
Complete
Run Code Online (Sandbox Code Playgroud)

我需要它是:

1
2
3
4
5
6
Complete
Run Code Online (Sandbox Code Playgroud)

我想吞下错误而不是使流程完整。我怎样才能实现这个目标?

kotlin kotlin-coroutines kotlin-flow

4
推荐指数
1
解决办法
6354
查看次数

如何自动化 Flutter 集成测试命令?

我已经阅读并尝试过使用颤振进行集成测试。我在这里遵循了本指南...

https://flutter.io/docs/cookbook/testing/integration

现在,要运行集成测试,我必须输入以下命令:

flutter drive --target=test_driver/app.dart
Run Code Online (Sandbox Code Playgroud)

我的问题是,有没有办法在 android studio 中自动执行此操作,因此我不必手动输入命令。我宁愿只单击一个按钮并运行集成测试,而不是一遍又一遍地键入命令。

我是新手,所以任何建议都将不胜感激。提前致谢。

integration-testing flutter

3
推荐指数
1
解决办法
1457
查看次数

我们可以为两个不同的 Android 应用程序使用相同的签名密钥吗?

是否可以使用单个签名密钥签署两个不同的应用程序以发布到 Google PlayStore?

有什么问题吗?有什么问题吗?这是好还是坏的做法?

提前致谢!

android android-app-signing

3
推荐指数
1
解决办法
1085
查看次数

如何在 Dart 中返回一个不可变的列表?

因此,在其他语言中,有ArrayListMutableList允许修改(添加、删除、删除)以列出项目。现在为了避免修改这些列表,只需将MutableListorArrayList作为List.

我想在Dart. 但在Dart返回一个List仍然允许你做list.add。这如何在 Dart 中正确完成?

dart

3
推荐指数
4
解决办法
3379
查看次数

Arrow-Kt Fx 与 Kotlin 协程

我正在努力学习,Arrow-Kt因为我对Functional Programming in Kotlin.

有人可以解释为什么需要创建另一个功能与 几乎相似的结构Kotlin Coroutines吗?还是我对此的理解有误?

这两者是如何结合在一起的?

kotlin arrow-kt kotlin-coroutines

3
推荐指数
1
解决办法
699
查看次数