android - ArrayAdapter没有默认构造函数

时间:2015-03-29 19:21:23

标签: android android-lifecycle oncreate onpause activity-lifecycle

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

kk

如果我添加超级(上下文,位置),问题就解决了:

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

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

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

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

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

1 个答案:

答案 0 :(得分:8)

  

如果我添加超级(上下文,位置),问题就解决了:

第二个参数不是position。它是布局资源的ID,默认情况下用于ArrayAdapter创建的行。您可以通过阅读the JavaDocs for the constructor that you are calling来了解这一点。

  

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

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

  

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

因为创建Activity的开发人员选择将其作为要求。

  

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

没有。你可以覆盖那些你需要的东西。

  

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

除了您想要做的任何事情之外,

Activity希望对这些生命周期方法进行处理。为了强制执行该操作,Activity要求您链接到超类,如果不这样做,则会抛出SuperNotCalledException