android - ArrayAdapter没有默认构造函数

ERJ*_*JAN 4 android oncreate activity-lifecycle android-lifecycle onpause

我正在制作适配器以使我的书籍集合在列表视图中可见.

KK

如果我添加super(context,position),问题就解决了:

    public BookAdapter(Context context, int position, List <Book> updatedBooksList) {
    super(context, position);
    this.context = context;
    this.booksList = updatedBooksList ;
}
Run Code Online (Sandbox Code Playgroud)

但是,我想知道为什么我需要这个参数(int position)并调用超类构造函数?

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
Run Code Online (Sandbox Code Playgroud)

另外,从广义上讲,为什么我们总是(?)需要在每个onCreate中调用super.onCreate?

我们不应该覆盖我们所有的活动生命周期阶段 - onPause,onREsume,onStop,OnDestroy,但我们仍然需要在每个阶段调用super?

Com*_*are 8

如果我添加super(context,position),问题就解决了:

第二个参数不是a position.它是布局资源的ID,默认情况下用于创建的行ArrayAdapter.您可以通过读取您正在调用的构造函数的JavaDoc来说明这一点.

但是,我想知道为什么我需要这个参数(int position)并调用超类构造函数?

因为,正如IDE告诉你的那样,没有默认的构造函数ArrayAdapter.在Java中,"默认构造函数"是零参数构造函数.Java中的每个构造函数都需要链接到超类构造函数.如果超类具有零参数("默认")构造函数,Java将自动链接到它.如果超类没有零参数构造函数,则需要手动链接到超类构造函数.

另外,从广义上讲,为什么我们总是(?)需要在每个onCreate中调用super.onCreate?

因为创建的开发人员Activity选择了这一要求.

我们不应该覆盖我们所有的活动生命周期阶段

不.您可以覆盖您需要的那些.

但我们还是要在每个人中打电话给超级?

Activity除了你想做的任何事情之外,我们还希望对这些生命周期方法进行处理.要强制执行此操作,Activity请求您链接到超类,SuperNotCalledException如果不这样做则抛出一个.