Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.
Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.
А всё, разобрался...пропустил super тут return onPrepareOptionsMenu(menu);
Разработка сайтов любой сложности.
Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.
Помогите пожалуйста! Проблема в том, что
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.setGroupVisible(R.id.group1, checkBox1.isChecked());
return super.onPrepareOptionsMenu(menu);
}
в этом месте, а точнее на setGroupVisible приложение вылетает, без этой команды все работает отлично, а с ней беда какая-то ...
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.setGroupVisible(R.id.group1, checkBox1.isChecked());
return super.onPrepareOptionsMenu(menu);
}
в этом месте, а точнее на setGroupVisible приложение вылетает, без этой команды все работает отлично, а с ней беда какая-то ...
Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.
Всем привет!! В первую очередь огромная благодарность "создателю" - великолепное изложение, всё очень доступно даже начинающим с нуля!!! Во-вторых за беседы и рассуждения тоже спасибо, очень помогают доосмыслить некоторые нюансы!! Ну вот всех поблагодарила, можно и совет спросить ))). Зараннее сори, если что-нить банальное буду спрашивать, но я пока что не волшебник ))). У меня такая ситуация: в приложении три экрана, соответственно каждому своя Activity и xml-ка. Для меню создала mymenu.xml, здесь у меня один пункт "настройки". Мне необходимо, чтобы по нажатию этого пункта вызывался список из шести подпунктов: "профиль", "помощь", " о программе", и бла-бла... у каждого из которых будет своё содержимое. И вот тут я втупила: не понимаю где прописать обработку нажатия и нужно ли для каждого подпункта создавать отдельную Activity или есть более рациональные варианты??? Очень рассчитываю на вашу помощь.
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.
Если у экранов "профиль", "помощь", " о программе", и бла-бла... нет ничего общего, лучше под каждый сделать отдельную Activity.
А меню должно быть общим для всех 3 экранов? Или 3 экрана это и есть "профиль", "помощь", " о программе", и бла-бла?
А меню должно быть общим для всех 3 экранов? Или 3 экрана это и есть "профиль", "помощь", " о программе", и бла-бла?
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.
1. Спасибо, что так скоренько))!! Да у этих ( "профиль", "помощь", " о программе", и бла-бла...) подпунктов ничего общего не намечается. На счёт Activity поняла спасибо, сделаю. Планирую эти подпункты выводить с помощью spinner. На сколько я понимаю здесь было бы логично реализовать дочернее PopupMenu, но с этим я не разобралась (((? А само меню,да, общее для трёх основных экранов, я это уже реализовала, везде нормально отображается. 2. Остаётся открытым вопрос где ж всё-таки прописать обработку нажатия пункта "настройки": в MainActivity или же нужно создать отдельный класс MenuActivity.java ?
Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.
Переопределяем метод onOptionsItemSelected(MenuItem item) в MainActivity этот метод будет вызываться при нажатии пунктов меню. В уроке же это есть.
Чтобы не ошибиться при вводе переопределяемых (Override) методов класса рекомендую делать это с использованием встроенных возможностей IDE Eclipse (если вы им пользуетесь):
В меню Source выбираем пункт Override/Implement Methods... там находим onOptionsItemSelected(MenuItem item), Eclipse сделает пустую заготовку переопределяемого метода, вам нужно будет только добавить свой код в эту заготовку.
Чтобы не ошибиться при вводе переопределяемых (Override) методов класса рекомендую делать это с использованием встроенных возможностей IDE Eclipse (если вы им пользуетесь):
В меню Source выбираем пункт Override/Implement Methods... там находим onOptionsItemSelected(MenuItem item), Eclipse сделает пустую заготовку переопределяемого метода, вам нужно будет только добавить свой код в эту заготовку.
Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.
????? Я добавила метод onOptionsItemSelected(MenuItem item) в MainActivity. Понимаю, что ему на вход нужен Id пункта меню, а что прописать на выход, чтобы отобразился spinner с подпунктами????? У меня Меню создано не программно, а через xml. В нём единственный пункт "настройки", при нажатии на который я хочу видеть к примеру spinner с шестью подпунктами, для каждого из которых будет вызываться своя Activity, так как они будут содержать много редактируемых и статичных элементов.
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.
Для вывода списка можно использовать AlertDialog (Урок по AlertDialog).
Только зачем все так усложнять, почему не вывести эти пункты сразу в меню?
Вот кусок реального кода который обрабатывает нажатие пункта меню:
Только зачем все так усложнять, почему не вывести эти пункты сразу в меню?
Вот кусок реального кода который обрабатывает нажатие пункта меню:
Код: Выделить всё
@Override
public boolean onOptionsItemSelected(MenuItem item){
switch (item.getItemId()) {
case R.id.menu_sort_duration:
sortArray(R.id.menu_sort_duration);
break;
case R.id.menu_sort_price:
sortArray(R.id.menu_sort_price);
break;
}
return false;
}
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.
Эх, я по началу так и делала что они все были пунктами меню, тока передо мной поставили задачу, в которой нужно сделать именно так как я описывала (((. Спасибо за подсказку, буду пытаться!
Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.
В Андроид для управлениями настройками есть специальное Activity - PreferenceActivity$01ny$hko писал(а):????? Я добавила метод onOptionsItemSelected(MenuItem item) в MainActivity. Понимаю, что ему на вход нужен Id пункта меню, а что прописать на выход, чтобы отобразился spinner с подпунктами????? У меня Меню создано не программно, а через xml. В нём единственный пункт "настройки", при нажатии на который я хочу видеть к примеру spinner с шестью подпунктами, для каждого из которых будет вызываться своя Activity, так как они будут содержать много редактируемых и статичных элементов.
Смотрите уроки 71-74 (ну и про настройки урок 33), думаю в них вы найдете все что нужно.
Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.
В Андроид для управлениями настройками есть специальное Activity - PreferenceActivity
Смотрите уроки 71-74 (ну и про настройки урок 33), думаю в них вы найдете все что нужно.
Спасибо Вам! Только меня сейчас не настройки приложения интересуют, а именно то меню, которое в уроке 14 описывается. Только у меня должен быть один пункт с названием "настройки".
Смотрите уроки 71-74 (ну и про настройки урок 33), думаю в них вы найдете все что нужно.
Спасибо Вам! Только меня сейчас не настройки приложения интересуют, а именно то меню, которое в уроке 14 описывается. Только у меня должен быть один пункт с названием "настройки".
Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.
Ну так и вызывайте из обработчика нажатия свое Activity с настройкам.
Здесь switch добавлен на случай, если вы захотите в будущем добавить еще пункты меню, если у вас один единственный пункт, то можно обойтись без него.
Можно сделать и по-другому, вообще не переопределять onOptionsItemSelected, а в onCreateOptionsMenu пункту меню с настройками добавить Intent для вызова Activity с настройками. Тогда вызов произойдет автоматически при нажатии пункта меню.
PrefActivity - Это ваше Activity с настройками, разумеется можете придумать свое имя класса.
Код: Выделить всё
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_settings:
Intent intent= new Intent(this, PrefActivity.class);
startActivity(intent);
break;
}
return super.onOptionsItemSelected(item);
}
Можно сделать и по-другому, вообще не переопределять onOptionsItemSelected, а в onCreateOptionsMenu пункту меню с настройками добавить Intent для вызова Activity с настройками. Тогда вызов произойдет автоматически при нажатии пункта меню.
Код: Выделить всё
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
Intent intent= new Intent(this, PrefActivity.class);
menu.findItem(R.id.menu_settings).setIntent(intent);
return true;
}
PrefActivity - Это ваше Activity с настройками, разумеется можете придумать свое имя класса.
Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.
Благодарю за помощь!!! Уже разобралась и так и сделала ))). Правда про onCreateOptionsMenu не догадалась, учту, спасибо.
Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.
Теперь вообще всё поменяла - отдельный экран открывается сразу при нажатии кнопки Меню на девайсе. Может кому пригодится, вот код, перехватывающий её нажатие:
@Override
public boolean onKeyDown(int KeyCode, KeyEvent event) {
if (KeyCode == KeyEvent.KEYCODE_MENU) {
Intent intent= new Intent(this, SettingsActivity.class);
startActivity(intent);
return true;
}
return super.onKeyDown(KeyCode, event);
}
@Override
public boolean onKeyDown(int KeyCode, KeyEvent event) {
if (KeyCode == KeyEvent.KEYCODE_MENU) {
Intent intent= new Intent(this, SettingsActivity.class);
startActivity(intent);
return true;
}
return super.onKeyDown(KeyCode, event);
}
-
- Сообщения: 7
- Зарегистрирован: 24 ноя 2012, 22:41
Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.
Добрый вечер! огромное спасибо за развёрнутый гайд, но интересует один вопрос: как сделать так, чтобы по нажатию на элемент меню выводилась не информация об этом элементе, а заранее заготовленный текст?. Меню создавал в MainActivity.java и классе MainActivity
Спасибо большое заранее
Спасибо большое заранее
Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.
В onOptionsItemSelected убираете sb и пишетеKalim32rus писал(а):Добрый вечер! огромное спасибо за развёрнутый гайд, но интересует один вопрос: как сделать так, чтобы по нажатию на элемент меню выводилась не информация об этом элементе, а заранее заготовленный текст?. Меню создавал в MainActivity.java и классе MainActivity
Спасибо большое заранее
Код: Выделить всё
tv.setText("Ваш текст");
-
- Сообщения: 7
- Зарегистрирован: 24 ноя 2012, 22:41
Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.
Вы наверное не так поняли, у каждого пункта меню должен быть свой текст, а по этому способу выводится всегда одно и то жеdamager82 писал(а):В onOptionsItemSelected убираете sb и пишетеКод: Выделить всё
tv.setText("Ваш текст");
Код: Выделить всё
// Выведем в TextView информацию о нажатом пункте меню
sb.append("Item Menu");
sb.append("\r\n groupId: " + String.valueOf(item.getGroupId()));
sb.append("\r\n itemId: " + String.valueOf(item.getItemId()));
sb.append("\r\n order: " + String.valueOf(item.getOrder()));
sb.append("\r\n title: " + item.getTitle());
tv.setText("OtherText");
Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.
Kalim32rus писал(а):Может как-то осуществить проверку нажатого пункта по ID и на основе этого выдавать информацию?damager82 писал(а):В onOptionsItemSelected убираете sb и пишетеКод: Выделить всё
tv.setText("Ваш текст");
Код: Выделить всё
// Выбор пункта Меню
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.menu_1:
// сюда можно добавить нужный вам код вывода какой-то информации
return true;
case R.id.menu_2:
// сюда можно добавить нужный вам код вывода какой-то информации
return true;
case R.id.menu_exit:
finish(); // это кнопка меню Выход, закрывает приложение, если в нём одна Активити
return true;
default:
return super.onOptionsItemSelected(item);
}
}
// Конец выбора пункта Меню
Код: Выделить всё
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/menu_1"
android:title="@string/menu_1" />
<item android:id="@+id/menu_2"
android:title="@string/menu_2" />
<item android:id="@+id/menu_exit"
android:title="@string/menu_exit" />
</menu>
Re: Урок 14. Меню, группы, порядок. MenuInflater и xml-меню.
Здравствуйте всем.
Такой вопрос. Может я не до конца понимаю.
В своем приложении я в логах заметил, что метод onCreateOptionsMenu запускается сразу же после создания активности и после него сразу же запускается метод onPrepareOptionsMenu, хотя я не нажимаю на кнопку меню. И потом когда нажимаю на кнопку вызова меню появляется меню, но onPrepareOptionsMenu не срабатывает. Только в последующих вызовах onPrepareOptionsMenu срабатывает после нажатия кнопки вызова меню.
И это все ведет к неправильной работе моего меню. То есть у меня есть пункт меню, который в зависимости от некоторых действий либо активен или неактивен. Но из-за того, что при первом вызове меню onPrepareOptionsMenu выполнился до нажатия, в первый раз меню отображается неправильно. А в последующих все нормально работает.
Может у кого-нибудь тоже такое было? Может я что-то упустил, а если нет, то как разрешить эту проблему?
Такой вопрос. Может я не до конца понимаю.
В своем приложении я в логах заметил, что метод onCreateOptionsMenu запускается сразу же после создания активности и после него сразу же запускается метод onPrepareOptionsMenu, хотя я не нажимаю на кнопку меню. И потом когда нажимаю на кнопку вызова меню появляется меню, но onPrepareOptionsMenu не срабатывает. Только в последующих вызовах onPrepareOptionsMenu срабатывает после нажатия кнопки вызова меню.
И это все ведет к неправильной работе моего меню. То есть у меня есть пункт меню, который в зависимости от некоторых действий либо активен или неактивен. Но из-за того, что при первом вызове меню onPrepareOptionsMenu выполнился до нажатия, в первый раз меню отображается неправильно. А в последующих все нормально работает.
Может у кого-нибудь тоже такое было? Может я что-то упустил, а если нет, то как разрешить эту проблему?