首页 > 解决方案 > setOnMenuItemClickListener 只执行一次

问题描述

  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 {

如果我删除这段代码,一切都会完美运行。

邀请是侧面菜单中的一个项目,可在点击时从后端生成动态链接。

标签: androidkotlinonclicknavigationview

解决方案


如果我删除这段代码,一切都会完美运行。

所以你告诉我如果你把

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) }
    }
}

推荐阅读