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
相关产品推荐
相关产品推荐

