我正在制作适配器以使我的图书集在列表视图中可见。
如果我添加超级(上下文,位置),问题就解决了:
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??
答案 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
。