我在我的应用程序中使用了一个Activity,即多片段模型。我有一个sharedViewModel,它带有协程通道,用于在片段之间发送和接收数据。此外,我有一个自定义对话框片段作为整个应用的弹出窗口,其用户操作将观察剩余的片段。我的问题是,从自定义对话框发送的事件在片段收集部分没有频繁触发(2/5点击)。我正在添加代码库供您参考。
共享视图模型部件
private val _cornerDataChannel = Channel<CornerData>()
val cornerDataEvent: Flow<CornerData> = _cornerDataChannel.receiveAsFlow()
fun updateCornerDataEvent(data: CornerData) = viewModelScope.launch {
Log.e(TAG, "Event Added")
_cornerDataChannel.send(data)
}
自定义对话框片段中的发送部分
private fun myToolSelectionCallBack(tool: ToolDTO) =
viewModel.updateCornerDataEvent(CornerData.ToolData(tool))
private fun systemStreamSelectionCallBack(stream: StreamDTO) =
viewModel.updateCornerDataEvent(CornerData.StreamData(stream))
接收碎片内的部件
private fun observeCornerItemSelectionCallBack() = lifecycleScope.launchWhenStarted {
viewModel.cornerDataEvent.collect { event ->
when (event) {
is StreamData -> streamSelectionCallBack(data= event.data)
is ToolData -> toolSelectionCallBack(data = event.data)
}
}
}
在接收端部分,用户点击频繁丢失,但总是在视图模型下得到更新部分。
1条答案
按热度按时间vmpqdwk31#
这不是点击的问题,这是因为您正在为多个观察者/接收者使用常规频道,但它应该是具有常规频道的单个接收者。您必须为具有单个发送者的多个接收者使用BroadcastChannels。现在BrodcastChannels已被弃用,它被替换为SharedFlow()
注意:此API自1.5.0起已过时。它将在1.6.0中被弃用,并显示警告,在1.7.0中显示错误。它将被替换为SharedFlow。
检查:BroadcastChannels-OfficialDocs