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) } }
修复方案
将两处的键名统一即可,二选一:
- 修改启动Intent的代码,把键改为
"note_id":
putExtra("note_id", note.id)
- 或者修改UpdateNoteActivity中的获取代码,把键改为
"note.id":
noteId = intent.getIntExtra("note.id", -1)
额外建议
为了避免这类手动输入字符串导致的键名不匹配问题,建议用常量统一定义Intent参数键,比如创建一个公共常量类:
object IntentConstants { const val NOTE_ID = "note_id" }
之后在启动和获取参数时都使用IntentConstants.NOTE_ID,从根源上避免拼写错误。
内容的提问来源于stack exchange,提问作者genespos
相关产品推荐
相关产品推荐

