2

Я создаю адаптер для адаптации моей коллекции книг, чтобы быть видимым в виде списка.android - Нет конструктора по умолчанию для ArrayAdapter

kk

Проблема решается, если добавить супер (контекст, должность):

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

Однако, я хочу знать, почему мне нужен этот аргумент (INT позиция) и вызвать конструктор суперкласса?

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

Кроме того, в более широком смысле, почему мы всегда (?) Нужно вызвать super.onCreate как здесь в каждом OnCreate?

Разве мы должны отвергнуть все наши активности на протяжении жизненного цикла этапов - OnPause, onREsume, OnStop, OnDestroy, но мы до сих пор назвать супер в каждой из них?

ответ

5

Проблема решена, если добавить супер (контекст, должность):

Второй параметр не является position. Это идентификатор ресурса макета, который по умолчанию используется для строк, созданных ArrayAdapter. Вы можете сказать это, прочитав the JavaDocs for the constructor that you are calling.

Однако, я хочу знать, зачем мне этот аргумент (int position) и вызвать конструктор суперкласса?

Поскольку, как сообщила вам IDE, на ArrayAdapter нет конструктора по умолчанию. В Java конструктор по умолчанию представляет собой конструктор с нулевым аргументом. Каждый конструктор в Java должен быть привязан к конструктору суперкласса. Если суперкласс имеет конструктор с нулевым аргументом («по умолчанию»), Java автоматически привяжется к нему. Если у суперкласса нет конструктора с нулевым аргументом, вам нужно связать его с конструктором суперкласса вручную.

Кроме того, в более широком смысле, почему мы всегда (?) Нуждаемся в вызове super.onCreate, как здесь, в каждом onCreate?

Потому что разработчики, которые создали Activity, решили сделать это требование.

Разве мы не должен переопределять все нашу Жизненный Цикл степени активности

No. переопределять те, которые вам нужно.

еще мы все еще должны называть супер в каждом из них?

Activity хочет выполнить свою обработку для тех методов жизненного цикла, в дополнение ко всему, что вы хотите сделать. Чтобы обеспечить это, Activity требует, чтобы вы подключились к суперклассу и выбрали SuperNotCalledException, если вы этого не сделаете.

+0

безупречный ответ ... – ERJAN

 Смежные вопросы

  • Нет связанных вопросов^_^