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

Kotlin:类内ArrayList无法添加元素,列表始终为空的原因

问题描述

我需要在Fragment中按需调用addItemTitleList、setItemTitleList和getTitleList方法,但无法向列表添加元素,列表长度始终为0,请问这是为什么?

相关代码

RequestFragment.kt

UploadedImageTokenRepository().addItemTitleList("ImageName1.jpg")
UploadedImageTokenRepository().getTitleList()

UploadedImageTokenRepository.kt

class UploadedImageTokenRepository {
    private var imgTitleList: ArrayList<String> = arrayListOf()

    fun getTitleList(): ArrayList<String> {
        return imgTitleList
    }

    fun addItemTitleList(title: String) {
        imgTitleList.add(title)
    }

    fun setItemTitleList(title: String, itemPosition: Int) {
        imgTitleList[itemPosition] = title
    }

    fun clearTitleList() {
        imgTitleList = arrayListOf()
    }
}
问题原因与解决方案

原因

每次调用UploadedImageTokenRepository()都会创建一个全新的类实例——你调用addItemTitleList时是往A实例的imgTitleList里添加元素,调用getTitleList时却获取的是B实例的空列表,自然看不到任何添加的内容。

解决方案

将UploadedImageTokenRepository改为单例模式,确保整个应用中只有一个实例:

修改UploadedImageTokenRepository.kt:

class UploadedImageTokenRepository private constructor() {
    private var imgTitleList: ArrayList<String> = arrayListOf()

    companion object {
        val instance: UploadedImageTokenRepository by lazy { UploadedImageTokenRepository() }
    }

    fun getTitleList(): ArrayList<String> {
        return imgTitleList
    }

    fun addItemTitleList(title: String) {
        imgTitleList.add(title)
    }

    fun setItemTitleList(title: String, itemPosition: Int) {
        imgTitleList[itemPosition] = title
    }

    fun clearTitleList() {
        imgTitleList = arrayListOf()
    }
}

在RequestFragment.kt中使用同一个实例操作列表:

UploadedImageTokenRepository.instance.addItemTitleList("ImageName1.jpg")
UploadedImageTokenRepository.instance.getTitleList()

这样所有操作都针对同一个实例的imgTitleList,添加元素后就能正常获取到内容了。

内容的提问来源于stack exchange,提问作者Ahmet Yılmaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 19:22:15