如何在不同Activity视图/类之间传递变量以避免编写重复代码
Android 跨Activity传递字符串列表实现方案
以下是几种常用的实现方式,可根据你的实际场景选择:
1. Intent 直接传递(最常用,适合小型列表)
这是Android官方提供的标准跨页传参方式,代码实现简单:
- MainActivity 发送代码示例(Kotlin)
val targetList = arrayListOf("内容1", "内容2", "内容3") val intent = Intent(this, DetailActivity::class.java) // 以键值对形式存入列表 intent.putStringArrayListExtra("COMMON_STRING_LIST", targetList) startActivity(intent)
- DetailActivity 接收代码示例(Kotlin)
// onCreate生命周期中读取 val receivedList = intent.getStringArrayListExtra("COMMON_STRING_LIST") ?: emptyList()
注意:该方式受Binder事务大小限制,传递的总数据量建议控制在1MB以内,超大列表不推荐使用
2. 单例类缓存(适合中大型列表、多页面复用)
如果列表较大或者多个页面都需要调用,可以用静态单例做临时缓存:
- 定义缓存类
object CommonDataHolder { var sharedStringList: List<String>? = null }
- 存入(MainActivity中调用)
CommonDataHolder.sharedStringList = 你的字符串列表实例
- 读取(DetailActivity中调用)
val useList = CommonDataHolder.sharedStringList ?: emptyList()
注意:页面使用完列表后建议及时将sharedStringList置空,避免不必要的内存占用
3. 资源文件预定义(适合固定不变的公共列表)
如果你的字符串列表是固定的公共资源,不需要动态生成,直接在res/values/arrays.xml中定义即可,所有页面都可以直接读取,完全不需要跨页传递:
- 先在arrays.xml中添加列表定义
<string-array name="common_string_list"> <item>内容1</item> <item>内容2</item> <item>内容3</item> </string-array>
- 任意Activity中读取
val list = resources.getStringArray(R.array.common_string_list).toList()
内容的提问来源于stack exchange,提问作者R.R.C.
相关产品推荐
相关产品推荐

