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

如何在Kotlin中通过Intent传递对象数组并展示设施名称

解决方案

1. 传递多个设施名称的正确方式

方式一:直接传递名称列表(String集合)

String本身实现了Serializable,可以直接通过Intent传递整个名称列表,适合只需要展示名称的场景:
在ListAllAdapter的点击事件中:

// 从API返回的facilities中提取所有name
val facilityNames = item.facilities.map { it.name }
val intent = Intent(context, DetailActivity::class.java).apply {
    putStringArrayListExtra("EXTRA_FACILITY_NAMES", ArrayList(facilityNames))
}
context.startActivity(intent)

方式二:传递完整Facility对象列表(推荐)

如果后续可能需要使用设施的其他字段,让Facility数据类实现Parcelable,传递完整对象更利于扩展:
首先定义Parcelable数据类:

import android.os.Parcelable
import kotlinx.parcelize.Parcelize

@Parcelize
data class Facility(
    val name: String,
    // 可添加其他字段如id、iconUrl等
) : Parcelable

然后在适配器中传递:

val intent = Intent(context, DetailActivity::class.java).apply {
    putParcelableArrayListExtra("EXTRA_FACILITIES", ArrayList(item.facilities))
}
context.startActivity(intent)

2. 在DetailActivity中接收并展示

场景一:用TextView快速展示

如果只需要简单罗列名称,接收后拼接成格式化字符串:

class DetailActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_detail)
        
        val facilityNames = intent.getStringArrayListExtra("EXTRA_FACILITY_NAMES")
        val facilitiesTv = findViewById<TextView>(R.id.tv_facilities)
        
        facilitiesTv.text = facilityNames?.joinToString(separator = "\n• ") { "• $it" } ?: "暂无设施信息"
    }
}

场景二:用RecyclerView展示(适合大量数据)

需要更美观的列表展示时,使用RecyclerView:
先创建简易适配器:

class FacilityAdapter(private val names: List<String>) : RecyclerView.Adapter<FacilityAdapter.ViewHolder>() {

    inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val nameTv: TextView = itemView.findViewById(R.id.tv_facility_name)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view = LayoutInflater.from(parent.context)
            .inflate(R.layout.item_facility, parent, false)
        return ViewHolder(view)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.nameTv.text = names[position]
    }

    override fun getItemCount() = names.size
}

然后在DetailActivity中配置:

class DetailActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_detail)
        
        val facilityNames = intent.getStringArrayListExtra("EXTRA_FACILITY_NAMES") ?: emptyList()
        val rvFacilities = findViewById<RecyclerView>(R.id.rv_facilities)
        
        rvFacilities.layoutManager = LinearLayoutManager(this)
        rvFacilities.adapter = FacilityAdapter(facilityNames)
    }
}

注意事项

  • 使用Parcelable时,需在模块的build.gradle中添加kotlin-parcelize插件:
plugins {
    // 其他插件
    id 'kotlin-parcelize'
}
  • 若设施数量极大,建议用ViewModel或全局单例暂存数据,避免Intent传递过大数据导致异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 21:15:41