相关疑难解决方法(0)

如何在 Compose NavGraph 内的两个或多个 Jetpack 可组合项之间共享视图模型?

考虑这个例子。

对于身份验证,我们将使用 2 个屏幕 - 一个屏幕用于输入电话号码,另一个屏幕用于输入 OTP。

这两个屏幕都是用 Jetpack Compose 制作的,对于 NavGraph,我们使用组合导航。

另外我必须提到 DI 是由 Koin 处理的。

val navController = rememberNavController()

NavHost(navController) {
    navigation(
        startDestination = "phone_number_screen",
        route = "auth"
    ) {
        composable(route = "phone_number_screen") {
            // Get's a new instance of AuthViewModel
            PhoneNumberScreen(viewModel = getViewModel<AuthViewModel>())
        }

        composable(route = "otp_screen") {
            // Get's a new instance of AuthViewModel
            OTPScreen(viewModel = getViewModel<AuthViewModel>())
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

那么,我们如何在 Jetpack 组合 NavGraph 中的两个或多个可组合项之间共享相同的视图模型呢?

kotlin koin android-jetpack-compose jetpack-compose-navigation

23
推荐指数
2
解决办法
1万
查看次数

如何在撰写中获得活动

有没有办法在撰写功能中获取当前活动?

@Composable
fun CameraPreviewScreen() {
    val context = ContextAmbient.current
    if (ActivityCompat.checkSelfPermission(
            context,
            Manifest.permission.CAMERA
        ) != PackageManager.PERMISSION_GRANTED
    ) {
        ActivityCompat.requestPermissions(
            this, MainActivity.REQUIRED_PERMISSIONS, MainActivity.REQUEST_CODE_PERMISSIONS  // get activity for `this`
        )
        return
    }
}
Run Code Online (Sandbox Code Playgroud)

android android-jetpack-compose

8
推荐指数
7
解决办法
2249
查看次数

如何从Activity中获取hiltViewModel?

我试图在两个地方获取视图模型,其中一个在 MainActivity 中使用:

val viewModel:MyViewModel by viewModels()
Run Code Online (Sandbox Code Playgroud)

另一个地方是在 compose 函数内部,使用:

val viewModel:MyViewModel = hiltViewModel()
Run Code Online (Sandbox Code Playgroud)

当我调试时,似乎那是两个不同的对象。无论如何,我可以在两个地方获得相同的对象吗?

android android-viewmodel android-jetpack-compose dagger-hilt

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

使用 Compose UI 时如何为每个列表项创建单独的 ViewModel?

我正在开发一个交易应用程序。我需要列出用户股票及其价值(利润或损失)以及投资组合的总价值。

对于馆藏列表,在 MVP 架构中,我将为每个列表项创建一个演示者,但对于此应用程序,我决定使用 MVVM(Compose、ViewModels 和 Hilt)。我的第一个想法是为每个列表项创建一个不同的 ViewModel。我hiltViewModel()在可组合方法签名中使用来创建 ViewModel 的实例,但这总是给我相同的实例,而这不是我想要的。使用 MVVM 架构时,我正在尝试以正确的方式执行操作还是应该使用单个 ViewModel?您知道我可以看看的任何项目吗?下图是我的实际屏幕的超级简化,每个单元格都很复杂,这就是为什么我想为每个单元格使用不同的 ViewModel。任何建议都非常受欢迎。

在此输入图像描述

android mvvm viewmodel android-architecture-components android-jetpack-compose

2
推荐指数
1
解决办法
1925
查看次数