我在我的项目中学习ModalBottomSheetLayout
。我有一个Button
和onClick
我发送Boolean
来显示sheetContent
。它工作一次没有任何问题。点击ModalBottomSheetLayout
外部后,它关闭了sheetContent
。再次点击`按钮后,工作表不再打开。我不明白这里有什么问题。
MainActivity.kt
class MainActivity : AppCompatActivity() {
private val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }
private val viewModel by viewModels<MainActivityViewModel>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
viewModel.enableBottomSheet.observe(this) {
binding.bottomSheetComposeView.setContent {
ModalBottomSheetSample(it)
}
}
binding.buttonComposeView.setContent {
ButtonView()
}
}
@Composable
fun ButtonView() {
Column(Modifier.fillMaxSize()) {
Button(onClick = {
viewModel.enableBottomSheet.postValue(true)
}) {
Text(text = "Open Bottom Sheet")
}
}
}
@Composable
@OptIn(ExperimentalMaterialApi::class)
fun ModalBottomSheetSample(value: Boolean) {
val state = rememberModalBottomSheetState(ModalBottomSheetValue.Hidden, skipHalfExpanded = true)
val scope = rememberCoroutineScope()
SideEffect {
scope.launch {
if (value) {
state.show()
}
}
}
ModalBottomSheetLayout(
sheetState = state,
sheetContent = {
LazyColumn {
items(5) {
ListItem(
icon = {
Icon(
Icons.Default.Favorite,
contentDescription = null
)
},
text = { Text("Item $it") },
)
}
}
}
) {}
}
}
MainActivityViewModel.kt
class MainActivityViewModel : ViewModel() {
val enableBottomSheet by lazy { MutableLiveData(false) }
}
输出
在这个video,你可以清楚地看到第一次打开按钮点击底部工作表。但不打开下次点击。谢谢
我正在使用compose_bom = "2023.03.00"
。请不要建议alpha或beta修复。
1条答案
按热度按时间5ktev3wc1#
我改变了两件事。
1.更改功能状态,即
StateFul
和StateLess
单独功能。1.从
LiveData
更改为MutableSharedFlow
,它工作正常。MainActivityViewModel.kt
MainActivity.kt