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

Android Kotlin RecyclerView存值后MenuItem跳转第二页值为空问题求助

问题根源

  1. 列表项点击事件未同步选中的国家数据到MainActivity:你在适配器里点击列表项仅构造了Intent但没有跳转,也没有将当前点击的Medal数据回传给MainActivity更新全局变量,MainActivity里的medal全局变量仅在初始化读取本地数据时被赋值,永远只存列表最后一条国家数据。
  2. 跳转时未携带参数:MainActivity点击菜单跳转DetailActivity的代码中,给Intent传name和abbr的两行代码被注释了,DetailActivity从Intent拿不到参数自然显示空值。

修复方案

第一步:给适配器添加点击回调,回传选中的Medal数据

修改MedalAdapter构造方法,新增点击回调参数:

class MedalAdapter(
    private val context: Context, 
    private val datalist: MutableList<Medal>,
    // 新增点击回调,将选中的Medal回传
    private val onItemClick: (Medal) -> Unit
): RecyclerView.Adapter<MedalAdapter.ViewHolder>() {

修改适配器中ViewHolder的bind方法内的点击事件,移除无用的Intent构造逻辑,触发回调:

v.setOnClickListener{
    Toast.makeText(v.context, toast, Toast.LENGTH_SHORT).show()
    // 回传当前点击的国家数据
    onItemClick(item)
    Log.i("Click Event", "name: " + item.name)
    Log.i("Click Event", "medal: " + item)
}

第二步:MainActivity接收回调更新选中数据

修改MainActivity中初始化适配器的代码,传入回调更新全局medal变量:

medallist.adapter = MedalAdapter(this, datalist) { clickedMedal ->
    // 每次点击列表项,更新全局保存的选中国家数据
    medal = clickedMedal
}

第三步:取消传参代码的注释

修改MainActivityonOptionsItemSelected方法,取消两行传参代码的注释,还可以添加边界判断避免未选国家直接点菜单崩溃:

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    return when (item.itemId) {
        R.id.save -> {
            if (!this::medal.isInitialized) {
                Toast.makeText(this, "请先选择一个国家", Toast.LENGTH_SHORT).show()
                return true
            }
            val intent = Intent(this, DetailActivity::class.java)
            Log.i("Medal", "name: " + medal.name)
            // 取消下面两行的注释,携带参数跳转
            intent.putExtra("name", medal.name)
            intent.putExtra("abbr", medal.abbreviation)
            startActivity(intent)
            true
        }
        else -> super.onOptionsItemSelected(item)
    }
}

修改完成后即可正常在DetailActivity拿到选中的国家信息展示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:24:05