Страница 1 из 1
Вопросы по IDEA13
Добавлено: 11 дек 2013, 21:14
mihalis
Пробую IDEA.
Добавляю метод OnCreateContextMenuListener, ide показывает в списке OnCreateContextMenuListener (android.view.View), а метод не предлагает. Т.е. я ожидаю увидеть конструктор (так это называется, кстати)?
Re: Вопросы по IDEA13
Добавлено: 11 дек 2013, 21:33
altwin
в доках он объявлен, как View.OnCreateContextMenuListener (
http://developer.android.com/reference/ ... tener.html), и если начать с View, то все будет ок.
Re: Вопросы по IDEA13
Добавлено: 11 дек 2013, 22:16
mihalis
Смотри какая ерунда...

- onCreateContextMenu1.jpg (14.95 КБ) 3950 просмотров
Выбираю и добаляется только
View.OnCreateContextMenuListener, а я ожидаю увидеть некий конструктор:
Код: Выделить всё
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenu.ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
super.onCreateContextMenu(menu, v, menuInfo);
}
Re: Вопросы по IDEA13
Добавлено: 11 дек 2013, 22:24
altwin
сбили с толку и пошел в доки...
View.OnCreateContextMenuListener - это интерфейс и используется:
Код: Выделить всё
View.OnCreateContextMenuListener objName = new View.OnCreateContextMenuListener{
}
либо implements класс и дальше можно делать @Override метода:
Код: Выделить всё
class MainActivity extends Activity implements View.OnCreateContextMenuListener{
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
}
}
P.S. используя idea есть хоткей, т.е. внутри класса сtr+o вызывает меню в котором можно найти метод доступный, как @Override(но сначала нужно указать implements Что-то, чтобы например onCreateContextMenu был доступен), кстати если нажать alt+insert, тоже есть удобные генераторы(конструктор/гетеры/сетеры и т.д.).
Re: Вопросы по IDEA13
Добавлено: 11 дек 2013, 23:20
mihalis
Спасибо за оперативную помощь.
altwin писал(а):сбили с толку и пошел в доки...
View.OnCreateContextMenuListener - это интерфейс и используется:
надо перечитать урок с кнопкой и объявлением OnClickListener
либо implements класс и дальше можно делать @Override метода:
Самое интересное, что и без имплементации работает (если руками прописать) или через Generate вставить. Почему?
P.S. используя idea есть хоткей, т.е. внутри класса сtr+o вызывает меню в котором можно найти метод доступный, как @Override(но сначала нужно указать implements Что-то, чтобы например onCreateContextMenu был доступен), кстати если нажать alt+insert, тоже есть удобные генераторы(конструктор/гетеры/сетеры и т.д.).
Уже сам через контекстное меню нашел Generate. За ctrl+O спасибо.
генераторы(конструктор/гетеры/сетеры и т.д.).
Сколько для меня новых слов...
Можешь на пальцах объяснить что означает @Override ?
Надеюсь я не слишком навязчив...
Re: Вопросы по IDEA13
Добавлено: 11 дек 2013, 23:35
altwin
mihalis писал(а):
Самое интересное, что и без имплементации работает (если руками прописать) или через Generate вставить. Почему?
Можешь на пальцах объяснить что означает @Override ?
работает потому, что класс Activity тоже наследует этот интерфейс, потому в данном случае интерфейс явно указывать не нужно, просто для наглядности приводил(хотя в голове все еще крутится питоновское -"явное лучше, чем не явное":)) Тут нужно смотреть иерархию классов, если метод доступен, то все ок. Если нет, но нужен искать кого отнаследовать
@Override -просто означает, что метод переопределяет метод класса родителя, т.е. по русски, если убрать @Override с метода onCreate(для примера), то получиться, что мы просто создаем свой метод onCreate(т.е. просто с тем же именем, как и у метода, который вызывается при старте), конечно это java и метод с тем же числом аргументов автоматом переопределит родителя, но для того и нужен @Override, если мы случайно забудем аргументы или передадим больше, это будет другой метод (т.е. он не будет вызываться Android о нем не знает), @Override же явно заставляет машину при сборке проверять то, что метод действительно переписывает родителя и если к примеру аргументов больше - выдаст ошибку. Или же если такого метода нет у родителя без @Override компилятор будет молчать и просто создаст его, с @Override же он выдаст ошибку. Т.е. это как статическая типизация... можно и без нее обойтись - проще - меньше писать, но это дополнительная проверка сильно упрощающая жизнь в сложных проектах.