我之前已多次扩展BaseAdapter和ArrayAdapter类,但我总是有一个关于BaseAdapter的唠叨问题:为什么缺少一些方法来自 android.widget.Adapter接口如getView(常识当然会说你需要这个)导致编译错误,而有些像hasStableIds那样不会导致任何这样的错误?我知道BaseAdapter从ListAdapter继承了这些方法,ListAdapter从Adapter继承它们,但为什么只有一对需要实现而其他方法不需要? android文档中不包含那些特别在BaseAdapter文档中的调用,那么如果只需要实现某些特定的BaseAdapter扩展调用的需要,那么在哪里呢?我知道我遗漏了一些东西,无论是我对oop原理的理解还是我阅读文档的能力。感谢您的见解!
注意:编译器错误是:
MyAdapter is not abstract and does not override abstract method getItemId(int) in Adapter
我找到的必需方法是:getItem,getCount,getItemId和getView
第二个注释:这些都是Adapter和ListAdapter中的抽象方法。
答案 0 :(得分:1)
为什么缺少android.widget.Adapter接口中的某些方法,比如getView(常识当然会说你需要这个)会导致编译错误
因为BaseAdapter
是一个抽象类,getView()
是一个抽象方法。
而其他人,比如hasStableIds不会导致任何此类错误吗?
因为BaseAdapter
的实现为hasStableIds()
,所以子类可以根据需要使用。
android文档不包含特别在BaseAdapter文档中的那些调用
您可以在Adapter
文档的BaseAdapter
部分的继承方法中找到它们。
那么,如果只有一些需要实现,那么对于扩展BaseAdapter的那些特定调用的需要有何指示呢?
Adapter
和ListAdapter
上定义的BaseAdapter
未实现的方法是必需的。
Adapter
和ListAdapter
上定义的BaseAdapter
实施的方法不是必需的,但如果需要,仍然可以覆盖。