Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.

Обсуждение уроков
Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.

Сообщение klblk » 27 фев 2015, 06:57

Foenix писал(а):На самом деле все это бесполезно. Компилятор и иак все плюсы переводит к StringBuilder- у
В данном случае полезно и оптимизация mikekekeke имеет место быть. Если бы там вся строка через "+" была написана то да, без разницы.
а так получаем 4 промежуточных StringBuilder'а, а уже потом добавляются к исходному StringBuilder'у.

Алемарика
Сообщения: 7
Зарегистрирован: 17 фев 2015, 12:34

Re: Урок 14. Меню, группы, порядок.

Сообщение Алемарика » 03 мар 2015, 14:50

У меня снова идеологический вопрос. Как лучше создавать меню - программно или через xml? И как в будущем определить, что лучше создавать какие-то объекты. (загуглить не удалось)

С одной стороны, нашла такой коммент:
AndreyI писал(а):
damager82 писал(а): В смысле создание меню из xml-файлов? Да, чет я пропустил в свое время эту фишку.
Вообще-то, если придерживаться одной методологии изложения, то как раз таки лучше с этой "фишки" начать знакомство с меню и указать как основной способ, а уже программные способы создания рассмотреть как дополнение. Меню являются частью ресурсов любого приложения (и не только Андроид) и при хорошем стиле программирования они должны именно так и определяться.
Ведь цель любого учебника не только доводить (я бы сказал, не столько) до читателя информацию, но и прививать хорошие стили программирования, заложить так сказать фундамент. Если не прав, можете кинуть в меня камень ;)
С другой стороны, про обработку кнопки, наоборот, не советовалось делать через xml
klblk писал(а):
Через xml может быть и просто, но...
....
1) Подход через интерфейсы более подходит для Java (и так как любой Android разработчик отчасти Java разработчик это ему удобнее)
2) Когда что-то происходит неявно, это не очень хорошо. Например над проектом работает два человека. Пусть это вы, кто делает обработчики в XML и кто-то, кто так не делает. Пусть тот второй напишет обработчик как он привык. Вы смотрите его код: о кнопка, о обработчик кнопки, все понятно. Теперь вы сделали через xml. Второй смотрит ваш код. О функция "onClickStart()", нигде не используется, пожалуй ее можно удалить. И он удалит и после этого проект даже может быть собирется (хотя я не проверял), но приложение точно упадет при нажатии этой злополучной кнопки. Если же реализовать все явно через интерфейсы, то: а) удалите интерфейс, ide начнет ругаться на setOnClickListener и @Override у метода onClick; б) удалите метод onClick - будет ругаться на отсутствие метода; в) а setOnClickListener вы не удалите, потому что в этой строчке четко и ясно говорится что назначается слушатель для кнопки.
3) xml это внешний вид, программирование оставьте для Java

а вообще пятница, вечер я устал, не слушайте меня.
Видение мира раздвоилось. Помогите собрать, пожалуйста!

P.s. Я понимаю, что меню и обработчик кнопки совсем разные вещи. Я не понимаю, по какому критерию определить что куда совать..

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.

Сообщение klblk » 04 мар 2015, 07:03

То что относится к созданию интерфейса (UI) и к ресурсам по возможности описывать в xml. То что касается логики делать в Java.
Саму кнопку описываете в XML, обработчик этой кнопки в JAVA.
Также и с меню. Описание в XML. Обработка нажатий в Java.

Алемарика
Сообщения: 7
Зарегистрирован: 17 фев 2015, 12:34

Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.

Сообщение Алемарика » 04 мар 2015, 13:14

klblk писал(а):То что относится к созданию интерфейса (UI) и к ресурсам по возможности описывать в xml. То что касается логики делать в Java.
Саму кнопку описываете в XML, обработчик этой кнопки в JAVA.
Также и с меню. Описание в XML. Обработка нажатий в Java.
Четко, понятно, по делу. Спасибо большое!

mikekekeke
Сообщения: 3
Зарегистрирован: 26 фев 2015, 16:20

Re: Урок 14. Меню, группы, порядок.

Сообщение mikekekeke » 17 мар 2015, 15:17

Алемарика писал(а):
С другой стороны, про обработку кнопки, наоборот, не советовалось делать через xml
На developer.android.com даётся вообще один способ создания обработчика для кнопки - через XML (в смысле привязки обработчика к кнопке)

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 14. Меню, группы, порядок.

Сообщение klblk » 18 мар 2015, 08:02

mikekekeke писал(а):
Алемарика писал(а):
С другой стороны, про обработку кнопки, наоборот, не советовалось делать через xml
На developer.android.com даётся вообще один способ создания обработчика для кнопки - через XML (в смысле привязки обработчика к кнопке)
два: http://developer.android.com/reference/ ... utton.html

mikekekeke
Сообщения: 3
Зарегистрирован: 26 фев 2015, 16:20

Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.

Сообщение mikekekeke » 18 мар 2015, 22:21

klblk писал(а):
mikekekeke писал(а):
Алемарика писал(а):
С другой стороны, про обработку кнопки, наоборот, не советовалось делать через xml
На developer.android.com даётся вообще один способ создания обработчика для кнопки - через XML (в смысле привязки обработчика к кнопке)
два: http://developer.android.com/reference/ ... utton.html
Ох... Я судил по вводному курсу просто. А почему 3й вариант с интерфейсом не даётся? Вроде как он более экономичный в плане памяти (мне просто интересно =) )

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.

Сообщение klblk » 19 мар 2015, 08:04

mikekekeke писал(а):Ох... Я судил по вводному курсу просто. А почему 3й вариант с интерфейсом не даётся? Вроде как он более экономичный в плане памяти (мне просто интересно =) )
Потому что developer.android.com это документация. Главное рассказать разработчику, что есть такой интерфейс, а как его можно использовать он знает. Startandroid.ru это же учебник, и многие сюда приходят, даже не знаю элементарную Java-базу и им приходится всё разжёвывать. А имплемментить интерфейс классу или создавать отдельный экземпляр интерфейса зависит от задачи и решения разработчика.

kuller
Сообщения: 4
Зарегистрирован: 03 апр 2015, 19:34

Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.

Сообщение kuller » 08 апр 2015, 15:06

Выполняю данный урок. Когда приложение тестирую на телефоне и нажимаю кнопку меню. приложение закрывается с текстом (В приложении "P0141_MenuAdv" произошла ошибка.) и что делать? я вообще в потере в такой ситуации...

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.

Сообщение doter.ua » 08 апр 2015, 16:54

kuller писал(а):Выполняю данный урок. Когда приложение тестирую на телефоне и нажимаю кнопку меню. приложение закрывается с текстом (В приложении "P0141_MenuAdv" произошла ошибка.) и что делать? я вообще в потере в такой ситуации...
Найди феникса и посмотри в подпись :lol:
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

twt494
Сообщения: 2
Зарегистрирован: 07 июл 2015, 11:36

Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.

Сообщение twt494 » 10 июл 2015, 11:04

Такая проблема. задний фон меню становиться прозрачным. когда пункты добавляю

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

 
@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);

        menu.add("menu1");
        menu.add("menu2");
        menu.add("menu3");

        return true;
    }
все норм. есть задний фон. меняю код или даже если просто в новом проекте пишу

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

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);

        menu.add(0,3,1,"menu1");
        menu.add(0,4,5,"menu2");
        menu.add(0,2,3,"menu3");

        return true;
    }
фон становится прозрачным. и после это есл даже поменяю код menu.add("menu1"); все равно фон остается прозрачным.

в чем проблема?
Вложения
ScreenShot
ScreenShot
Screen.JPG (16.27 КБ) 12962 просмотра

Andrewsolo
Сообщения: 1
Зарегистрирован: 22 июл 2015, 22:26

Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.

Сообщение Andrewsolo » 22 июл 2015, 22:29

Допустим имеется меню, структура которого изменяется в процессе работы, в меню есть пункты с чекбоксами.
Как организовать сохранение состояния чекбоксов в пунктах меню при перестройке структуры?

driversti
Сообщения: 7
Зарегистрирован: 23 фев 2015, 13:04

Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.

Сообщение driversti » 05 авг 2015, 16:51

Привет всем. В видео уроке №14 Виталий задал домашнее задание, чтобы скрывать группу пунктов меню или один пункт меню с помощью чекбоксов без нажатия на три точки в Action Bar и вызова onPrepareOptionsMenu(Menu menu). Насколько я понял, эти действия должны выполнятся в методе onCreate(). Если да, то нам нужно создать переменную Menu menu и связать её с xml-файлом. Я правильно понимаю? Но как это сделать?
Таким образом

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

menu = (Menu) findViewById(R.menu.menu_main)
это не работает. Без метода findViewById() также. Что я не делаю не так? Или должен быть другой метод? Но как мне знать какой?

Аватара пользователя
Владислав2303
Сообщения: 17
Зарегистрирован: 02 ноя 2013, 15:11
Откуда: Минск
Контактная информация:

Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.

Сообщение Владислав2303 » 29 авг 2015, 16:17

Вот такой вопрос у меня возник. Сделал все по уроку и пришла в голову идея не скрывать меню после нажатия на один из пунктов. Поясню: хочу сделать, чтобы меню можно было закрыть только по кнопке меню, ну или back. Гугл ничего не рассказал, но натолкнул на одну интересную вещь. У класса menu есть константа FLAG_ALWAYS_PERFORM_CLOSE (http://developer.android.com/reference/ ... /Menu.html), и эта константа используется как флаг в методе performShortcut (int keyCode, KeyEvent event, int flags), но после долгих размышлений не до конца понимаю что за метод, и как эту информацию мне использовать. Кто поможет из опытных?

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.

Сообщение doter.ua » 29 авг 2015, 22:57

Может лучше сразу navigation drawer(боковое меню) сделать или диалог? это меню не такое уж и удобное чтобы постоянно висеть.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Аватара пользователя
Владислав2303
Сообщения: 17
Зарегистрирован: 02 ноя 2013, 15:11
Откуда: Минск
Контактная информация:

Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.

Сообщение Владислав2303 » 30 авг 2015, 00:19

doter.ua писал(а):Может лучше сразу navigation drawer(боковое меню) сделать или диалог? это меню не такое уж и удобное чтобы постоянно висеть.
Я понял, ответ более чем исчерпывающий. Просто есть у пунктов меню checkable, и при нажатии например, оно сразу сворачивается и даже не видно, поставилась галка или нет. То есть по дефолту сделано не аккуратно. Ну и плюс на будущее думал в небольших приложениях, в меню пару настроек например с checkable кинуть и чтобы за одно открытие меню можно было два чека поставить. Ну вообщем понял, что идея на троечку, но если очень сильно надо будет, то думаю наберусь опыта к том времени.

CrazyShotz
Сообщения: 8
Зарегистрирован: 17 фев 2016, 09:18

Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.

Сообщение CrazyShotz » 17 фев 2016, 11:31

почему item.getItemId() в контексте урока, возвращает мне int? Сам метод типа int. Или же все нормально, он так и будет пытаться перевести строковый id в число? Если же нет, как мне получить строковое значение id?
P.S.
(Совсем недавно начал изучать андроид, просьба камнями не кидаться :) )

driversti
Сообщения: 7
Зарегистрирован: 23 фев 2015, 13:04

Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.

Сообщение driversti » 17 фев 2016, 11:35

CrazyShotz писал(а):почему item.getItemId() в контексте урока, возвращает мне int? Сам метод типа int. Или же все нормально, он так и будет пытаться перевести строковый id в число? Если же нет, как мне получить строковое значение id?
P.S.
(Совсем недавно начал изучать андроид, просьба камнями не кидаться :) )
Если метод возвращает значение int, то естественно вы получите число. Если же вам необходимо это число отобразить в виде строки, можете воспользоваться методом String.valueOf(int i)

CrazyShotz
Сообщения: 8
Зарегистрирован: 17 фев 2016, 09:18

Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.

Сообщение CrazyShotz » 18 фев 2016, 09:05

driversti писал(а):
CrazyShotz писал(а):почему item.getItemId() в контексте урока, возвращает мне int? Сам метод типа int. Или же все нормально, он так и будет пытаться перевести строковый id в число? Если же нет, как мне получить строковое значение id?
P.S.
(Совсем недавно начал изучать андроид, просьба камнями не кидаться :) )
Если метод возвращает значение int, то естественно вы получите число. Если же вам необходимо это число отобразить в виде строки, можете воспользоваться методом String.valueOf(int i)
В том то и дело, что при использовании этого метода я получаю число, вместо строки. Этот метод использовался в контексте урока. То есть String.valueOf(item.getItemId()) преобразовал типы, но не преобразовал значение. Единственное, что не понравилось дебаггеру - это то, что я использовал объект String внутри StringBuilder, что в свою очередь негативно отразится на производительности.

driversti
Сообщения: 7
Зарегистрирован: 23 фев 2015, 13:04

Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.

Сообщение driversti » 18 фев 2016, 09:53

CrazyShotz писал(а):То есть String.valueOf(item.getItemId()) преобразовал типы, но не преобразовал значение
Я чего-то не понимаю?! Что вы вкладываете в словосочетание "не преобразовал значение"? Если есть String x = 5, этот метод вернёт int x = 5. Или вам нужно int = "какое-то другое значение отличное от 5"? Объясните что вам нужно

Ответить