You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android Compose中ModalNavigationDrawer无法通过代码控制开合但支持滑动的问题求助

Android Compose中ModalNavigationDrawer无法通过代码控制开合但支持滑动的问题求助

兄弟我一眼就瞅出你代码里的问题啦!你仔细看——你确实创建了drawerStatescope,但你没把drawerState传给ModalNavigationDrawer组件啊!

滑动抽屉能正常工作是因为Compose会给ModalNavigationDrawer默认创建一个内部状态,但你自己定义的drawerState和这个抽屉组件完全没绑定到一起,所以你在点击事件里调用drawerState.close(),本质上只是修改了一个和抽屉无关的状态对象,自然不会有任何效果。

解决方法超简单,就是给ModalNavigationDrawer加上drawerState参数,把你创建的状态传进去就行,修改后的代码如下:

@Composable fun MainScreenWithNavigationDrawer() {
    val drawerState = rememberDrawerState(initialValue = DrawerValue.Closed)
    val scope = rememberCoroutineScope()
    
    ModalNavigationDrawer(
        drawerState = drawerState, // 就是这行你漏掉的关键代码!
        drawerContent = {
            ModalDrawerSheet {
                NavigationDrawerItem(
                    label = { Text(text = "Load trivia file") },
                    selected = false,
                    onClick = { 
                        scope.launch { 
                            drawerState.close() 
                        }
                        println("CLICK")
                    },
                )
            }
        },
    ) {
        // Screen content
    }
}

这样修改之后,你点击按钮时调用drawerState.close()就能正确触发抽屉关闭了,因为现在状态对象和抽屉组件已经绑定到一起啦。

内容来源于stack exchange

火山引擎 最新活动