You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ViewHolder中调用Intent无法启动UpdateNoteActivity问题排查

解决Kotlin笔记应用中Update按钮无法打开Update视图的问题

问题现象

  • 点击updateButton时,Toast验证点击事件有效,但UpdateNoteActivity无法正常启动(更换其他Activity时按钮可正常工作)
  • 排查发现UpdateNoteActivity中获取的noteId始终为-1,触发了finish()逻辑导致Activity直接关闭

问题根源

启动Intent传递参数时使用的键是"note.id",但在UpdateNoteActivity中获取参数用的键是"note_id",键名不匹配导致参数未成功传递,触发了noteId为-1时的关闭逻辑。

代码对比与修复

原错误代码片段

UpdateNoteActivity.kt中获取参数的代码:

noteId = intent.getIntExtra("note_id", -1)
if(noteId == -1) {
    Toast.makeText(this, "noteId = -1", Toast.LENGTH_SHORT).show()
    finish()
    return
}

启动Intent的代码:

override fun onBindViewHolder(holder: NoteViewHolder, position: Int) {
    val note = notes[position]
    holder.titleTextView.text = note.title
    holder.contentTextView.text = note.content

    holder.updateButton.setOnClickListener{
        val intent = Intent(holder.itemView.context, UpdateNoteActivity::class.java).apply {
            putExtra("note.id", note.id)
        }
        holder.itemView.context.startActivity(intent)
    }
}

修复方案

将两处的键名统一即可,二选一:

  1. 修改启动Intent的代码,把键改为"note_id":
putExtra("note_id", note.id)
  1. 或者修改UpdateNoteActivity中的获取代码,把键改为"note.id":
noteId = intent.getIntExtra("note.id", -1)

额外建议

为了避免这类手动输入字符串导致的键名不匹配问题,建议用常量统一定义Intent参数键,比如创建一个公共常量类:

object IntentConstants {
    const val NOTE_ID = "note_id"
}

之后在启动和获取参数时都使用IntentConstants.NOTE_ID,从根源上避免拼写错误。

内容的提问来源于stack exchange,提问作者genespos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 15:22:09