我有两个活动,它们有不同的导航功能,但如何导航到不属于该活动的功能.我不能使用意图导航,也不能使用导航导航,因为这些功能是不同活动的一部分.

我想从作为StartActivity一部分的函数移动到MainActivity,但我收到错误: @Composable调用只能从@Composable函数的上下文中进行

以下是我的主要活动:

@AndroidEntryPoint
class MainActivity : ComponentActivity() {
    private val startViewModel: StartViewModel by viewModels()
    private val viewModel: TabBarViewModel by viewModels()

    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)
        setContent {
            val navController: NavHostController = rememberNavController()
            NavHost(
                navController = navController,
                startDestination = Screen.Introduction.route
            ) {
                composable(Screen.BottomNavigationScreen.route) {
                    BottomNavigationScreen()
                }


            }
        }
    }
}

另一项活动

@AndroidEntryPoint
class StartActivity : ComponentActivity() {
    private val viewModel: StartViewModel by viewModels()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val startDestination = if (AppPreferences.hasSeenIntro) {
            val intent = Intent(this, MainActivity::class.java)
            startActivity(intent)
            return
        } else if (AppPreferences.hasDownloadedContent) {
            Screen.Introduction.route
        } else {
            Screen.SelectLanguage.route
        }

        setContent {
            val navController: NavHostController = rememberNavController()
            NavHost(
                navController = navController,
                startDestination = startDestination
            ) {
                composable(Screen.Start.route) {
                    Start(navController, viewModel)
                }
                composable(Screen.CheckWhere.route) {
                    CheckWheretoGo(navController)
                }
                composable(Screen.SelectLanguage.route) {
                    SelectLanguage(navController)
                }
                composable(Screen.Introduction.route) {
                    IntroductionScreen(navController)
                }

            }
        }
    }

现在在我的Introduction可组合函数中:

@Composable
Introduction(){
                IconButton(onClick = {
                    if (selectedPosition + 1 == items.size) {
                        val context = LocalContext.current
                        val intent = Intent(context, MainActivity::class.java)
                        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}



推荐答案

替换:

@Composable
Introduction() {
    IconButton(
        onClick = {
            if (selectedPosition + 1 == items.size) {
                val context = LocalContext.current
                val intent = Intent(context, MainActivity::class.java)
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
            }
        }
    )
}

有了这一点:

@Composable
Introduction() {
    val context = LocalContext.current

    IconButton(
        onClick = {
            if (selectedPosition + 1 == items.size) {
                val intent = Intent(context, MainActivity::class.java)
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
            }
        }
    )
}

You can only reference a composition local value, like LocalContext.current, from inside of a composable function or lambda/function type.
The onClick lambda/function type specifically is not composable. However, you can hoist the composition local read to be outside of IconButton() itself.

Android相关问答推荐

致命异常:java.lang. SecureExcellent::用户10021和当前进程都没有android. permissions.Change_WIFI_STATE

如何在"不同活动"中添加不同按钮?

无法安装后重新编译android代码'

如何处理谷歌未经证实的应用程序拒绝?

如何在Jetpack composeH中创建具有弯曲末端的六边形形状

如何在使用带有底部导航组件的片段管理器时更改片段工具栏的标签

Android 14预测性背部手势-闪烁的白色背景色

如何使用 Wea​​r OS 上的运行状况服务模拟位置?

使用 Jetpack Compose 在 Android TV 上启用系统声音

为一组闪烁的可组合项制作动画,控制同步/定时

如何在 Jetpack Compose 中对齐按钮底部中心?

在compose中,为什么修改List元素的属性,LazyColumn不刷新

如何在屏幕旋转或系统主题更改后将光标移动到 TextField 的末尾并保持键盘显示?

Jetpack Compose Alignment - 误解了 alignBy 修饰符

重命名列失败的房间自动迁移(NOT NULL 约束失败,生成错误的迁移类)

如何处理 com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: For input string: "T1V 4Y8" Kotlin

Kotlin Compose forEach 中的负间距

Firebase Crashlytics 缩小 R8 Android

Android YouTube SDK - 视频无法在某些 Android 设备中播放

为什么在try 实例化 Mediaplayer 时会出现 NullPointerException?安卓Kotlin