如何解决ArrayAdapter 覆盖 addAll 未调用
我已经实现了一个自定义 ArrayAdapter
,覆盖了 addAll
方法,以便我可以检测何时设置了项目。但我重写的 addAll
方法从未被调用:
class MyAdapter(
val context: Context,var items: MutableList<Any>
) : ArrayAdapter<Any>(context,R.layout.my_adapter_item,items) {
//this override never called
override fun addAll(collection: MutableCollection<out Any>) {
Log.d("add all called","MyAdapter")
}
//neither is this one
override fun addAll(vararg items: Any?) {
super.addAll(*items)
Log.d("add all called","MyAdapter")
}
}
在我的活动中,一旦加载了项目,我就会在适配器上调用 addAll
:
class MyActivity: AppCompatActivity() {
private lateinit var binding: MyActivityLayoutBinding
private lateinit var adapter: MyAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = MyActivityLayoutBinding.inflate(layoutInflater)
adapter = MyAdapter(this,mutablelistof())
binding.myAutoCompleteTextView.adapter = adapter
//load data and observe,then call onDataLoaded
}
private fun onDataLoaded(items: MutableList<Any>) {
adapter.clear()
//DOES NOT CALL EITHER overridden addAll method
adapter.addAll(items)
adapter.notifyDataSetChanged()
}
}
当我从 addAll
调用 MyAdapter
时,为什么在 addAll
中都没有调用被覆盖的 MyActivity
方法?
我发现检测项目何时设置的唯一方法是使用 setter 将 items
移动到 var
中:
class MyAdapter(
val context: Context
//pass empty list to super ArrayAdapter
) : ArrayAdapter<Any>(context,mutablelistof()) {
var items: MutableList<Any> = mutablelistof()
set(value) {
field = value
Log.d("you set items!","MyAdapter")
}
}
当然,这意味着我不能从 addAll
调用 MyActivity
,而是必须直接设置 items 属性:adapter.items = items
。
这感觉很荒谬。我只想检测何时通过 addAll
设置项目。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。