setOnMenuItemClickListener 只执行一次
setOnMenuItemClickListener executes only once
invite.setOnMenuItemClickListener {
drawerLayout.closeDrawer(GravityCompat.START)
mainViewModel.executeInvite(
InviteBody(
Constants.apiKey,
Constants.apiPass,
Constants.apiInviteService
)
)
true
}
由于函数mainViewModel.executeInvite被调用,监听器只执行一次
下面的executeInvite是一个使用协程的函数:
fun executeInvite(inviteBody: InviteBody) {
viewModelScope.launch {
如果我删除这段代码,一切都会完美无缺。
邀请是侧边菜单中的一个项目,点击后从后端生成动态 link。
If I remove this piece of code, everything works perfectly.
所以你告诉我如果你把
invite.setOnMenuItemClickListener {
drawerLayout.closeDrawer(GravityCompat.START)
Log.d("asdf", "hello")
true
}
在 executeInvite
中,然后按 3 次邀请菜单项,您会看到 3 条日志语句说“你好”?如果是这样,那么您的侦听器应该是正确的,错误发生在 executeInvite
正在执行的代码中的某处。
如果是这种情况,您可以通过执行以下操作来调试它:
fun executeInvite(inviteBody: InviteBody) {
viewModelScope.launch {
runCatching { /* whatever code you're doing */ }
.onSuccess { Log.d("asdf", "successful!") }
.onFailure { throwable -> Log.d("asdf", "failure!", throwable) }
}
}
所以对于所有遭受此痛苦的人
我设法通过创建 DialogFragment 并从菜单点击侦听器调用它来解决这个问题。代码如下:
invite.setOnMenuItemClickListener {
drawerLayout.closeDrawer(GravityCompat.START)
InviteDialogFragment().show(
supportFragmentManager, Constants.apiInviteService)
true
}
Invite Fragment 中有另一个视图模型,它会调用 API 并观察那里的结果。出于某种原因,从 onMenuCLickListener 调用 API 导致视图级别出现异常,导致导航项的所有其他项都无法点击。
invite.setOnMenuItemClickListener {
drawerLayout.closeDrawer(GravityCompat.START)
mainViewModel.executeInvite(
InviteBody(
Constants.apiKey,
Constants.apiPass,
Constants.apiInviteService
)
)
true
}
由于函数mainViewModel.executeInvite被调用,监听器只执行一次
下面的executeInvite是一个使用协程的函数:
fun executeInvite(inviteBody: InviteBody) {
viewModelScope.launch {
如果我删除这段代码,一切都会完美无缺。
邀请是侧边菜单中的一个项目,点击后从后端生成动态 link。
If I remove this piece of code, everything works perfectly.
所以你告诉我如果你把
invite.setOnMenuItemClickListener {
drawerLayout.closeDrawer(GravityCompat.START)
Log.d("asdf", "hello")
true
}
在 executeInvite
中,然后按 3 次邀请菜单项,您会看到 3 条日志语句说“你好”?如果是这样,那么您的侦听器应该是正确的,错误发生在 executeInvite
正在执行的代码中的某处。
如果是这种情况,您可以通过执行以下操作来调试它:
fun executeInvite(inviteBody: InviteBody) {
viewModelScope.launch {
runCatching { /* whatever code you're doing */ }
.onSuccess { Log.d("asdf", "successful!") }
.onFailure { throwable -> Log.d("asdf", "failure!", throwable) }
}
}
所以对于所有遭受此痛苦的人
我设法通过创建 DialogFragment 并从菜单点击侦听器调用它来解决这个问题。代码如下:
invite.setOnMenuItemClickListener {
drawerLayout.closeDrawer(GravityCompat.START)
InviteDialogFragment().show(
supportFragmentManager, Constants.apiInviteService)
true
}
Invite Fragment 中有另一个视图模型,它会调用 API 并观察那里的结果。出于某种原因,从 onMenuCLickListener 调用 API 导致视图级别出现异常,导致导航项的所有其他项都无法点击。