#java #android #superclass #super
#java #Android #суперкласс #супер
Вопрос:
У меня есть AdapterView.OnItemClickListener
реализованный в родительском Activity
элементе, который возвращает, если позиция <=
равна нулю. Когда я создаю подкласс this Activity
и переопределяю OnItemClickListener
вызов super
, затем извлекаю элемент из моего Adapter
, ArrayIndexOutOfBoundsException
брошенного. Но это происходит потому return
, что isn’t called before Adapter.getItem
вызывается из моего подкласса. Другими словами:
Это работает
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (position <= 0) {
return;
}
final Foo foo = mAdapter.getItem(position);
}
Это не работает
В моем родительском Activity
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (position <= 0) {
return;
}
}
В моем подклассе
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
super.onItemClick(parent, view, position, id);
final Foo foo = mAdapter.getItem(position);
}
Но если я войду OnItemClickListener.onItemClick
в свой родительский Activity
класс и просто оставлю Adapter.getItem
его в своем подклассе, Exception
он не будет выброшен, а журнал будет напечатан.
Итак, я полагаю, я просто не понимаю, почему super
и return
не вызывается заранее, хотя, похоже, так и должно быть. super
Просто так не работает? Я просто полностью что-то упускаю из виду здесь? Просто чтобы было ясно, ArrayIndexOutOfBoundsException
в этом случае это ничего не значит. Это происходит потому, что я использую очень настраиваемый Adapter
.
Комментарии:
1. super.onItemClick — это просто любой другой вызов метода. когда он возвращается, он не оказывает никакого влияния на вызывающий метод.
2. О, я думаю, я понял, что это перенесено.