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

Обсуждение уроков
Аватара пользователя
Atetc
Сообщения: 45
Зарегистрирован: 02 май 2014, 13:13
Откуда: Уфа
Контактная информация:

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

Сообщение Atetc » 27 май 2014, 22:15

Вот такое меню как лучше реализовывать?

Изображение
Русскоязычный чат Android разработчиков https://gitter.im/rus-speaking/android

Voyager
Сообщения: 3
Зарегистрирован: 29 май 2014, 12:52

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

Сообщение Voyager » 09 июн 2014, 14:46

tvv_yar, спасибо, твой пост помог. Удалил сначала фрагмент, но не показывались пункты меню со второй группы. После замены библиотеки android.support.v7.app.ActionBarActivity на android.app.Activity и наследования MainActivity от Activity все заработало как надо.

energomaks2012
Сообщения: 4
Зарегистрирован: 18 июн 2014, 11:29

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

Сообщение energomaks2012 » 18 июн 2014, 11:44

Подскажите пожалуйста, пробую создать боковое меню в своем приложении на основании примера: http://developer.android.com/training/i ... rawer.html.

<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">

<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />

<ListView android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="#111"/>
</android.support.v4.widget.DrawerLayout>

В данном примере используется ListView, а возможно применить ExpandableList и как? Заранее спасибо.

energomaks2012
Сообщения: 4
Зарегистрирован: 18 июн 2014, 11:29

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

Сообщение energomaks2012 » 18 июн 2014, 12:06

Разобрался!!! Необходимо вместо android:choiceMode="singleChoice" использовать android:choiceMode="multipleChoice"

Dizzy
Сообщения: 3
Зарегистрирован: 21 июн 2014, 21:19

Баг с меню

Сообщение Dizzy » 21 июн 2014, 21:30

Небольшой баг. При запуске на эмуляторе 4.0.3 метод onPrepareOptionsMenu вызывается при старте приложения, а не при первом вызове меню. При повторном и следующих вызовах меню метод onPrepareOptionsMenu вызывается при показе меню. Воспроизводим баг:
- запускаем приложение.
- cтавим галочку на расширеный показ.
- вызываем меню.
- видим сокращенное меню. (((
Похоже, что при запуске приложения меню показывается и скрывается, чтобы исключить фризы при первом показе меню. Кто сталкивался с подобным, как сделать работу примера корректной?

Dizzy
Сообщения: 3
Зарегистрирован: 21 июн 2014, 21:19

Урок 14. Решение

Сообщение Dizzy » 28 июн 2014, 16:57

Нашел решение проблемы.
http://stackoverflow.com/questions/1288 ... r-the-firs

Polundra
Сообщения: 9
Зарегистрирован: 26 июл 2014, 20:19

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

Сообщение Polundra » 05 авг 2014, 16:47

Помогите плз. Код был скопирован из урока, что ни делай - в меню всегда вылазит 6 элементов (независимо от состояния чекбокса) и даже от версии AVD. Причем и в варианте описания меню в MineActivity, и в варианте с mymenu.xml.
Перечитал всю ветку, вроде что понял то проверил, косяков найти не могу...
На всякий случай вот код:

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

package com.example.pastor.p0141_menuadv;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.CheckBox;

public class MineActivity extends ActionBarActivity {

    // Элементы экрана
    TextView tv;
    CheckBox chb;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mine);

        // находим эдементы
        tv = (TextView) findViewById(R.id.textView);
        chb = (CheckBox) findViewById(R.id.chbExtMenu);
    }

    // создание меню
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.mymenu, menu);
        return super.onCreateOptionsMenu(menu);
    }

    // обновление меню
    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        // TODO Auto-generated method stub
        // пункты меню с ID группы = 1 видны, если в CheckBox стоит галка
        menu.setGroupVisible(1, chb.isChecked());
        return super.onPrepareOptionsMenu(menu);
    }

    // обработка нажатий
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        StringBuilder sb = new StringBuilder();

        // Выведем в 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(sb.toString());

        return super.onOptionsItemSelected(item);
    }
 /*    @Override
       public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.mine, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }*/
}
Пламенное спасибо!

Donart
Сообщения: 114
Зарегистрирован: 06 ноя 2013, 08:59

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

Сообщение Donart » 05 авг 2014, 17:09

Помогите плз.
onCreateOptionsMenu
PS Еще пару слов, найдите его в уроке и сравните
Последний раз редактировалось Donart 05 авг 2014, 17:28, всего редактировалось 1 раз.

Polundra
Сообщения: 9
Зарегистрирован: 26 июл 2014, 20:19

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

Сообщение Polundra » 05 авг 2014, 17:15

Donart писал(а):
Помогите плз.
onCreateOptionsMenu
А еще пару слов?:) Имя метода написано без ошибок, AndroidStudio ни на что не ругается, т.е. метод в импортах доступен...

Polundra
Сообщения: 9
Зарегистрирован: 26 июл 2014, 20:19

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

Сообщение Polundra » 05 авг 2014, 17:59

Donart писал(а):найдите его в уроке и сравните
Это код для варианта с mymenu.xml (2-я часть урока).
onCreateOptionsMenu - взят из урока. Хотя счас скопипастил его еще раз, конечно не помогло: в меню всегда 6 пунктов.

Donart
Сообщения: 114
Зарегистрирован: 06 ноя 2013, 08:59

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

Сообщение Donart » 05 авг 2014, 18:26

Polundra писал(а):
Donart писал(а):найдите его в уроке и сравните
Это код для варианта с mymenu.xml (2-я часть урока).
Про какой код идет речь. Вы что издеваетесь :|
Программное меню(первая часть урока)
[syntax=java5]@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
// добавляем пункты меню
menu.add(0, 1, 0, "add");
menu.add(0, 2, 0, "edit");
menu.add(0, 3, 3, "delete");
menu.add(1, 4, 1, "copy");
menu.add(1, 5, 2, "paste");
menu.add(1, 6, 4, "exit");

return super.onCreateOptionsMenu(menu);
}[/syntax]
XML меню(вторая часть урока)
Если захотите скрыть группу, выполняете тот же метод setGroupVisible и передаете туда R.id.group1 в качестве ID группы.

Polundra
Сообщения: 9
Зарегистрирован: 26 июл 2014, 20:19

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

Сообщение Polundra » 05 авг 2014, 18:54

Ответ нашелся здесь: viewtopic.php?f=3&p=29395#p29395
Все заработало, AndroidStudio по дефолту наследовало не тот класс (ActionBarActivity)

ikmor
Сообщения: 4
Зарегистрирован: 09 авг 2014, 19:09

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

Сообщение ikmor » 09 авг 2014, 19:15

вопрос не совсем по теме урока.
пишу все уроки без копипаста и столкнулся с такой проблемкой, когда начинаю писать r.id. этот глупый эклипс меняет набранный мною код на android.r.id. там естесно нет элементов из файла r.java, + добавляется в импорт import android.R; после чего все набранные до этого айдишники выделяются ошибкой.
как это вылечить? надоело удалять import android.R; да и каждый раз удалять android. перед R тоже както не очень приятно.

игорь77
Сообщения: 3
Зарегистрирован: 19 авг 2014, 14:43

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

Сообщение игорь77 » 19 авг 2014, 14:48

скажите пожайлуста, с помощью меню можно изменить настройки одного из методов программы?!
Ну например MediaRecorder пишет в программе звук с микрофона, нужну предоставить возможность выбора записи разговора...
Как связать пункт меню с активацией источнока звука?
Заранее благодарен.

игорь77
Сообщения: 3
Зарегистрирован: 19 авг 2014, 14:43

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

Сообщение игорь77 » 20 авг 2014, 12:10

спасибо за совет))
дельный......

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

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

Сообщение Foenix » 20 авг 2014, 12:40

Игорь, какой вопрос - такой ответ.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

игорь77
Сообщения: 3
Зарегистрирован: 19 авг 2014, 14:43

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

Сообщение игорь77 » 20 авг 2014, 19:04

Вопрос вроде бы прост ( для меня так точно)) )....
Суть его заключается в следующем: есть приложение "диктофон", в нем есть метод startRecord(), в этом методе активируется микрофон, для записи звука: mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
Есть контекстное меню....
Так вот: как связать пункт в меню с методом активизации микрофона, и из меню изменить запись звука на: mediaRecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);
Ну не говорю о выборе папки для зиписа файлов.....

arguchinsky
Сообщения: 2
Зарегистрирован: 22 окт 2014, 11:05

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

Сообщение arguchinsky » 20 ноя 2014, 10:20

Написал проект. Запустил на телефоне, но меню не отображается. Даже нет кнопки открытия меню.
вот код:
public boolean onCreateOptionsMenu(Menu m){
getMenuInflater().inflate(R.menu.menu, m);
return super.onCreateOptionsMenu(m);
}
public boolean onOptionsItemSelected(MenuItem i){
switch (i.getItemId()){
case CLEAN_ID:
tvRes.setText("");
etVal1.setHint("Value 1");
etVal2.setHint("Value 2");
break;
case QUIT_ID:
finish();
break;
}
return super.onOptionsItemSelected(i);
}

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

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

Сообщение mikekekeke » 26 фев 2015, 16:35

Только начинаю изучать Android, но имею некоторый опыт программирования на Java, и заметил в коде такой момент вот здесь:

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

StringBuilder sb = new StringBuilder();

      // Выведем в 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(sb.toString());
Создаётся StringBuilder и используется конкатенация строк через "+", что создаёт новый StringBuilder, который соединяет строки и затем выполняет toString и так 4 раза.
Корректнее, на мой взгляд, с точки зрения быстродействия и использования памяти, будет применить методы уже созданного StringBuilder'а и избежать ненужных телодвижений:

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

StringBuilder sb = new StringBuilder();

        // Выведем в TextView информацию о нажатом пункте меню
        sb.append("Item Menu");
        sb.append("\r\n groupId: ").append(String.valueOf(item.getGroupId()));
        sb.append("\r\n itemId: ").append(String.valueOf(item.getItemId()));
        sb.append("\r\n order: ").append(String.valueOf(item.getOrder()));
        sb.append("\r\n title: ").append(item.getTitle());
        textV.setText(sb.toString());

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

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

Сообщение Foenix » 26 фев 2015, 19:37

На самом деле все это бесполезно. Компилятор и иак все плюсы переводит к StringBuilder- у
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Ответить