为什么BaseAdapter的自定义子类只需要从Adapter接口实现一些抽象方法?

时间:2013-08-06 20:50:17

标签: java android oop adapter baseadapter

我之前已多次扩展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中的抽象方法。

1 个答案:

答案 0 :(得分:1)

  

为什么缺少android.widget.Adapter接口中的某些方法,比如getView(常识当然会说你需要这个)会导致编译错误

因为BaseAdapter是一个抽象类,getView()是一个抽象方法。

  

而其他人,比如hasStableIds不会导致任何此类错误吗?

因为BaseAdapter的实现为hasStableIds(),所以子类可以根据需要使用。

  

android文档不包含特别在BaseAdapter文档中的那些调用

您可以在Adapter文档的BaseAdapter部分的继承方法中找到它们。

  

那么,如果只有一些需要实现,那么对于扩展BaseAdapter的那些特定调用的需要有何指示呢?

AdapterListAdapter上定义的BaseAdapter未实现的方法是必需的。

AdapterListAdapter上定义的BaseAdapter 实施的方法不是必需的,但如果需要,仍然可以覆盖。