【问题标题】:android - There is no default constructor for ArrayAdapterandroid - ArrayAdapter 没有默认构造函数
【发布时间】:2015-06-02 17:30:37
【问题描述】:

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

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

    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 吗?

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    另外,在更广泛的意义上,为什么我们总是(?)需要像这里一样在每个 onCreate 中调用 super.onCreate?

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

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

    没有。你覆盖你需要的那些。

    但我们仍然必须在每个人中调用 super 吗?

    Activity 想要处理那些生命周期方法,除了你想做的任何事情。为了强制执行,Activity 要求您链接到超类,如果您不这样做,则抛出 SuperNotCalledException

    【讨论】:

      猜你喜欢
      • 2016-05-22
      • 2023-03-20
      • 2016-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多