Android Compose中ModalNavigationDrawer无法通过代码控制开合但支持滑动的问题求助
兄弟我一眼就瞅出你代码里的问题啦!你仔细看——你确实创建了drawerState和scope,但你没把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




