无法从一个活动的可组合函数意图转到另一个活动

3
我有两个具有不同功能的活动,它们之间可以进行导航,但是如何导航到不属于该活动的功能呢?我不能使用意图进行导航,也不能使用导航进行导航,因为这些功能属于不同的活动。
我想从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)
}



1个回答

1
替换:
@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)
            }
        }
    )
}

你只能在可组合函数或lambda/函数类型内部引用组合局部值,例如LocalContext.current
onClick lambda/函数类型特别不可组合。但是,你可以将组合局部读取提升到IconButton()之外。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接