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

使用接口为Fragment生成列表时Model类实例创建异常问题

问题分析与解决方案

1. 打印item显示对象地址的问题

你看到的com.bb.App.MyModelClass@a28b423是普通类默认的toString()输出格式,Kotlin中普通类默认继承Any类的toString方法,输出规则为「类名@内存哈希值」,不属于错误,只是没有输出属性内容而已。

  • 解决方案:将MyModelClass改为Kotlin数据类(data class),数据类会自动生成包含属性值的toString、equals、hashCode方法:
data class MyModelClass(
    var title: String,
    var images: ArrayList<String>
)

2. 列表添加元素后为空的核心问题

原因

你在接口中仅声明了val list: ArrayList<MyModelClass>这一抽象属性,接口本身不会对该属性做初始化操作,所有实现该接口的类(你的Fragment)必须主动重写该属性,并为其赋值一个已经实例化的ArrayList对象,否则接口中list += item的操作是在操作未初始化的集合实例,自然无法添加元素,打印出来就是空列表。

正确实现示例

你的Fragment实现该接口时必须完成接口要求属性的初始化:

class YourFragment : Fragment(), MyInterface {
    // 重写接口要求的两个属性,完成初始化
    override val mcontext: Context get() = requireContext()
    override val list: ArrayList<MyModelClass> = arrayListOf()

    // 调用接口方法填充列表
    fun fetchData() {
        val finalList = getList()
        // 后续绑定列表到Adapter等逻辑
    }
}

额外优化建议

  • 接口内的list属性建议改为可变集合的声明,或者直接在getList方法内部创建新集合返回,避免外部持有集合引用导致的多端修改问题
  • 解析JSON生成MyModelClass实例时,建议单独校验title和images的空值,避免后续列表渲染出现异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:09:03