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

Kotlin Android应用不使用ArrayAdapter实现Firebase数据变更与ListView展示

解决方案说明

ListView 本身的渲染机制强制依赖Adapter完成数据与视图的绑定,你导师的要求实际是禁止直接使用系统内置的ArrayAdapter/SimpleArrayAdapter,需要自定义Adapter实现,以下是适配代码:


1. 在Activity内部新增自定义BaseAdapter实现

// 自定义Adapter,完全不依赖系统内置ArrayAdapter
inner class ProductAdapter(private val data: List<Product>) : BaseAdapter() {
    override fun getCount() = data.size
    override fun getItem(position: Int) = data[position]
    override fun getItemId(position: Int) = position.toLong()

    override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
        // 复用原有布局保证多选功能和原有效果一致
        val itemView = convertView ?: layoutInflater.inflate(android.R.layout.simple_list_item_checked, parent, false)
        val currentProduct = getItem(position)
        // 直接调用你已实现的toString()方法填充文本
        (itemView as CheckedTextView).text = currentProduct.toString()
        // 同步选中状态
        itemView.isChecked = lvItems.isItemChecked(position)
        return itemView
    }
}

2. 替换原有Adapter声明

将原来的ArrayAdapter声明替换为自定义的ProductAdapter:

val products = ArrayList<Product>()
// 替换为自定义Adapter
val adptr: ProductAdapter by lazy { ProductAdapter(products) }

3. 绑定与监听逻辑调整

原有逻辑基本无需修改,只需要补充选中状态刷新的监听:

// 原有绑定逻辑不变
lvItems.adapter = adptr
lvItems.choiceMode = ListView.CHOICE_MODE_MULTIPLE

// 补充列表项点击监听,刷新选中状态展示
lvItems.setOnItemClickListener { _, _, _, _ ->
    adptr.notifyDataSetChanged()
}

myRef.child("products").addChildEventListener(object : ChildEventListener {
    override fun onChildAdded(snapshot: DataSnapshot, previousChildName: String?) {
        val p: Product = snapshot.getValue(Product::class.java) as Product
        p.fillKey(snapshot.key!!)
        products.add(p)
        adptr.notifyDataSetChanged()
        lvItems.smoothScrollToPosition(products.size - 1)
    }
    // 其余ChildEventListener的方法保留你原有代码即可
})

修改后完全满足不使用Simple ArrayAdapter的要求,所有原有功能、多选效果、toString()方法的调用都完全保留。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:18:05