Вопросы по IDEA13

Ответить
mihalis
Сообщения: 17
Зарегистрирован: 28 ноя 2013, 23:32

Вопросы по IDEA13

Сообщение mihalis » 11 дек 2013, 21:14

Пробую IDEA.
Добавляю метод OnCreateContextMenuListener, ide показывает в списке OnCreateContextMenuListener (android.view.View), а метод не предлагает. Т.е. я ожидаю увидеть конструктор (так это называется, кстати)?

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Вопросы по IDEA13

Сообщение altwin » 11 дек 2013, 21:33

в доках он объявлен, как View.OnCreateContextMenuListener (http://developer.android.com/reference/ ... tener.html), и если начать с View, то все будет ок.
Изображение

mihalis
Сообщения: 17
Зарегистрирован: 28 ноя 2013, 23:32

Re: Вопросы по IDEA13

Сообщение mihalis » 11 дек 2013, 22:16

Смотри какая ерунда...
onCreateContextMenu1.jpg
onCreateContextMenu1.jpg (14.95 КБ) 3939 просмотров
Выбираю и добаляется только View.OnCreateContextMenuListener, а я ожидаю увидеть некий конструктор:

Код: Выделить всё

    
@Override
    public void onCreateContextMenu(ContextMenu menu, View v,
                                    ContextMenu.ContextMenuInfo menuInfo) {
        // TODO Auto-generated method stub
        super.onCreateContextMenu(menu, v, menuInfo);
    }

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Вопросы по IDEA13

Сообщение altwin » 11 дек 2013, 22:24

сбили с толку и пошел в доки...

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, тоже есть удобные генераторы(конструктор/гетеры/сетеры и т.д.).
Изображение

mihalis
Сообщения: 17
Зарегистрирован: 28 ноя 2013, 23:32

Re: Вопросы по IDEA13

Сообщение mihalis » 11 дек 2013, 23:20

Спасибо за оперативную помощь.
altwin писал(а):сбили с толку и пошел в доки...

View.OnCreateContextMenuListener - это интерфейс и используется:
надо перечитать урок с кнопкой и объявлением OnClickListener
либо implements класс и дальше можно делать @Override метода:
Самое интересное, что и без имплементации работает (если руками прописать) или через Generate вставить. Почему?
P.S. используя idea есть хоткей, т.е. внутри класса сtr+o вызывает меню в котором можно найти метод доступный, как @Override(но сначала нужно указать implements Что-то, чтобы например onCreateContextMenu был доступен), кстати если нажать alt+insert, тоже есть удобные генераторы(конструктор/гетеры/сетеры и т.д.).
Уже сам через контекстное меню нашел Generate. За ctrl+O спасибо.
генераторы(конструктор/гетеры/сетеры и т.д.).
Сколько для меня новых слов...

Можешь на пальцах объяснить что означает @Override ?
Надеюсь я не слишком навязчив...

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Вопросы по IDEA13

Сообщение altwin » 11 дек 2013, 23:35

mihalis писал(а): Самое интересное, что и без имплементации работает (если руками прописать) или через Generate вставить. Почему?

Можешь на пальцах объяснить что означает @Override ?
работает потому, что класс Activity тоже наследует этот интерфейс, потому в данном случае интерфейс явно указывать не нужно, просто для наглядности приводил(хотя в голове все еще крутится питоновское -"явное лучше, чем не явное":)) Тут нужно смотреть иерархию классов, если метод доступен, то все ок. Если нет, но нужен искать кого отнаследовать ;)

@Override -просто означает, что метод переопределяет метод класса родителя, т.е. по русски, если убрать @Override с метода onCreate(для примера), то получиться, что мы просто создаем свой метод onCreate(т.е. просто с тем же именем, как и у метода, который вызывается при старте), конечно это java и метод с тем же числом аргументов автоматом переопределит родителя, но для того и нужен @Override, если мы случайно забудем аргументы или передадим больше, это будет другой метод (т.е. он не будет вызываться Android о нем не знает), @Override же явно заставляет машину при сборке проверять то, что метод действительно переписывает родителя и если к примеру аргументов больше - выдаст ошибку. Или же если такого метода нет у родителя без @Override компилятор будет молчать и просто создаст его, с @Override же он выдаст ошибку. Т.е. это как статическая типизация... можно и без нее обойтись - проще - меньше писать, но это дополнительная проверка сильно упрощающая жизнь в сложных проектах.
Изображение

Ответить