【问题标题】:How to avoid opening screen multiple times?如何避免多次打开屏幕?
【发布时间】:2021-06-13 20:24:17
【问题描述】:

video with bug 我的应用架构看起来像:viewModel + Compose layout per screen。在我的视图模型中,我有 Channel(),我在其中处理来自屏幕的操作:

init {
  viewModelScope.launch {
            try {
                actions.receiveAsFlow().collect { action ->
                    when (action) {
                                    //handle actions here
                   }
              }
        }
}

在主屏幕中,我有帖子列表。问题是当我选择帖子并将用户导航到 PostDetails 屏幕时,我可以选择另一个帖子,尽管带有帖子的列表处于底层。我认为它与 Home viewModel 相关,并且该操作流程在后台运行。任何解决方案我应该改变什么?

@Composable
fun AppNavigationHost(appNavController: NavController) {
NavHost(
    navController = appNavController as NavHostController,
    startDestination = PostDetails.route
) {
    composable(Default.route) {}

    composable(PostDetails.route) { it ->
        it.arguments?.getString("post").let {
            val post = Gson().fromJson(it, Post::class.java)
            PostDetailsScreen(post, appNavController)
        }
    }

}

}

【问题讨论】:

    标签: android kotlin navigation android-jetpack-compose


    【解决方案1】:

    我以前也遇到过类似的问题,虽然没有使用 compose。如果您没有将对话框设置为可点击,那么您可以点击它。我建议添加:

    android:clickable="true"
    

    到您用于发布详细信息的 UI 或撰写等效项

    【讨论】:

    • 在 Compose 中“可点击”默认设置为 true
    猜你喜欢
    • 2012-12-06
    • 2021-10-25
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 2012-02-02
    相关资源
    最近更新 更多