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

Android Studio(Kotlin): 如何通过Intent启动Activity并获取返回结果

解决Android Kotlin中Activity数据回传与RecyclerView动态更新问题

一、启动第二个Activity并获取用户输入返回

使用Activity Result API(推荐,替代已废弃的startActivityForResult)

  1. 在第一个Activity中注册Activity Result Launcher
    在Activity的onCreate方法里初始化:
    private val addItemLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
        if (result.resultCode == RESULT_OK) {
            val data = result.data
            // 获取从第二个Activity传回的数据
            val newItemName = data?.getStringExtra("EXTRA_ITEM_NAME")
            val newItemDesc = data?.getStringExtra("EXTRA_ITEM_DESC")
            // 将新数据添加到你的数据源列表
            newItemName?.let {
                val newItem = YourItemClass(name = it, desc = newItemDesc ?: "")
                yourDataSourceList.add(newItem)
                // 通知RecyclerView更新
                yourAdapter.notifyItemInserted(yourDataSourceList.size - 1)
            }
        }
    }
    
  2. 启动第二个Activity
    点击添加按钮时调用:
    addButton.setOnClickListener {
        val intent = Intent(this, AddItemActivity::class.java)
        addItemLauncher.launch(intent)
    }
    
  3. 在第二个Activity中返回用户输入
    用户输入完成后(比如点击保存按钮),将数据放入Intent并返回:
    saveButton.setOnClickListener {
        val itemName = editTextName.text.toString().trim()
        val itemDesc = editTextDesc.text.toString().trim()
        if (itemName.isNotEmpty()) {
            val resultIntent = Intent()
            resultIntent.putExtra("EXTRA_ITEM_NAME", itemName)
            resultIntent.putExtra("EXTRA_ITEM_DESC", itemDesc)
            setResult(RESULT_OK, resultIntent)
            finish()
        }
    }
    

二、RecyclerView动态更新(添加/删除后刷新)

确保适配器具备数据源操作能力

  1. 自定义Adapter时,持有数据源的引用,并提供添加、删除方法:
    class YourItemAdapter(private val itemList: MutableList<YourItemClass>) : RecyclerView.Adapter<YourItemAdapter.ViewHolder>() {
        // ... 其他ViewHolder和绑定逻辑省略
    
        // 添加项目方法
        fun addItem(item: YourItemClass) {
            itemList.add(item)
            notifyItemInserted(itemList.size - 1) // 高效更新,只刷新新增的条目
        }
    
        // 删除项目方法
        fun removeItem(position: Int) {
            itemList.removeAt(position)
            notifyItemRemoved(position)
            notifyItemRangeChanged(position, itemList.size) // 刷新后续条目的位置
        }
    }
    
  2. 调用适配器方法更新UI
    • 添加时:在第一个Activity收到返回数据后,调用yourAdapter.addItem(newItem)
    • 删除时:在RecyclerView的条目点击删除按钮时,调用yourAdapter.removeItem(position)

注意事项

  • 数据源必须是MutableList,这样才能动态修改
  • 不要直接修改数据源后调用notifyDataSetChanged()(虽然能生效但效率低),优先用notifyItemInserted/notifyItemRemoved这类定向更新方法
  • 如果使用ViewModel管理数据源,确保数据变化时能通知到Activity/Fragment,再触发适配器更新

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:55:31