Урок 15. Контекстное меню

Обсуждение уроков
Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 15. Контекстное меню

Сообщение rezak90 » 03 ноя 2012, 22:50

Вот я и спрашиваю так это или не так?
так
и хочет справку глянуть, а она тю-тю..
почему же она должна тю-тю? внизу просто вылезит один вспомогательный барчик со своими кнопками
R.id.team
Политика на форуме запрещена

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

Re: Урок 15. Контекстное меню

Сообщение Foenix » 03 ноя 2012, 22:54

где это написано, можете показать?
и тот и другой бар вылазить по кнопке "меню" либо по кнопке с тремя точками.
по одной кнопочке не может два барчика вылазить ))))
R.id.team

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

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 15. Контекстное меню

Сообщение rezak90 » 03 ноя 2012, 23:20

по кнопке меню вылазит меню из actionbar'a (то что вы называете "три точки").
R.id.team
Политика на форуме запрещена

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

Re: Урок 15. Контекстное меню

Сообщение Foenix » 04 ноя 2012, 11:00

правильно, оба же меню из одного места, в том-то идело.
на десктопе такого нет, это сильно непривычно для пользователя.
ладно, спрошу в других местах..
R.id.team

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

Аватара пользователя
powercat
Сообщения: 508
Зарегистрирован: 20 июл 2012, 11:31

Re: Урок 15. Контекстное меню

Сообщение powercat » 07 ноя 2012, 14:07

Я правильно понял следующее?

1. Регистрация контекстного меню для каждого вью отдельная?
2. Обработка нажатия на эти вью отлавливается по айди через селект кейс?
3. Обработка выбора пункта меню - отлавливается по айди через селект кейс, НО помещается все в одном селект кейсе, сразу для обоих меню?

П.3 - особенно интересен.

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

Re: Урок 15. Контекстное меню

Сообщение Foenix » 07 ноя 2012, 20:37

судя по статье с девелопера это два разные совсем вида меню, просто появляются из одного места, поэтому все в разных.
есть момент по п1 если меню одинаковое из парочки активити, то можно сделать так, чтоб это все было в одном месте (обработка нажатий) в классе. И тогда если чтто-то поменяется, то менять в одном месте надо.
задавала этот вопрос на стеке, там его забраковали :)))) но смысл был такой - в контекстное надо пихать все пункты, которые могут выполняться при выделении.

А. У меня еще вопросик - у кого андроид есть. Вот gmail, там можно выделить сколько хочешьп исем (например для удаления). Какой там способ есть быстро поснимать все галочки? Вдруг передумал.
Б. И еще не пойму как выглядит и где он - пункт этого меню Done.
R.id.team

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

Аватара пользователя
powercat
Сообщения: 508
Зарегистрирован: 20 июл 2012, 11:31

Re: Урок 15. Контекстное меню

Сообщение powercat » 08 ноя 2012, 09:27

Olivka писал(а):судя по статье с девелопера это два разные совсем вида меню, просто появляются из одного места, поэтому все в разных.
есть момент по п1 если меню одинаковое из парочки активити, то можно сделать так, чтоб это все было в одном месте (обработка нажатий) в классе. И тогда если чтто-то поменяется, то менять в одном месте надо.
задавала этот вопрос на стеке, там его забраковали :)))) но смысл был такой - в контекстное надо пихать все пункты, которые могут выполняться при выделении.

А. У меня еще вопросик - у кого андроид есть. Вот gmail, там можно выделить сколько хочешьп исем (например для удаления). Какой там способ есть быстро поснимать все галочки? Вдруг передумал.
Б. И еще не пойму как выглядит и где он - пункт этого меню Done.
)))) Я ВООБЩЕ не понял, что ты написала ))))) Напиши по пунктам ))) Вопрос задан по заданию из урока, там для двух вьюшек делается два меню

Wa1deMar
Сообщения: 14
Зарегистрирован: 01 авг 2012, 11:19

Re: Урок 15. Контекстное меню

Сообщение Wa1deMar » 12 дек 2012, 17:46

Подскажите, как реализовать закрытие меню при клике за его пределы? очень надо

eternal_ego
Сообщения: 10
Зарегистрирован: 14 дек 2012, 05:19

Re: Урок 15. Контекстное меню

Сообщение eternal_ego » 14 дек 2012, 05:30

Так ведь оно по умолчанию закрывается при клике за пределы. Интересно, что вы сделали, чтобы оно не закрывалось :)

И любопытная штука: если одно контекстное меню назначить для layout, а другое - для элемента на нём, то для элемента в итоге вызовется контекстное меню, включающее пункты из обоих.

cadmy
Сообщения: 2
Зарегистрирован: 22 дек 2012, 13:05

Re: Урок 15. Контекстное меню

Сообщение cadmy » 22 дек 2012, 13:13

Пробую создать контекстное меню при помощи xml-файла. Для показа правильного набора опций использую метод setGroupVisible, однако при вызове меню появляются все пункты меню.
Создание меню

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

    public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
		switch (v.getId()) {
		case R.id.tvColor:
			menu.setGroupVisible(2, false);
			getMenuInflater().inflate(R.menu.mymenu, menu);
			
		break;
		case R.id.tvSize:
			menu.setGroupVisible(1, false);
			getMenuInflater().inflate(R.menu.mymenu, menu);
		break;
		}
	}
Xml

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

<?xml version="1.0" encoding="utf-8"?>
<menu
 xmlns:android="http://schemas.android.com/apk/res/android">
 <group
 android:id="@+id/group1">
<item
 android:id="@+id/menu_red"
 android:title="red">
</item>
<item
 android:id="@+id/menu_green"
 android:title="green">
</item>
<item
 android:id="@+id/menu_blue"
 android:title="blue">
</item>
</group>
<group
 android:id="@+id/group2">
<item
 android:id="@+id/menu_22"
 android:orderInCategory="1"
 android:title="22">
</item>
<item
 android:id="@+id/menu_26"
 android:orderInCategory="2"
 android:title="26">
</item>
<item
 android:id="@+id/menu_30"
 android:orderInCategory="4"
 android:title="30">
</item>
</group>
</menu>
Подскажите, пожалуйста, как исправить.

asolovey
Сообщения: 11
Зарегистрирован: 12 дек 2012, 00:58

Re: Урок 15. Контекстное меню

Сообщение asolovey » 23 дек 2012, 22:27

Здравствуйте,

Выложите, пожалуйста, кто-то полный код реализации меню через хml, а точнее программную его часть. Что-то никак не могу додуматься.
Спасибо!

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 15. Контекстное меню

Сообщение damager82 » 24 дек 2012, 14:59

cadmy писал(а):Пробую создать контекстное меню при помощи xml-файла. Для показа правильного набора опций использую метод setGroupVisible, однако при вызове меню появляются все пункты меню.
Подскажите, пожалуйста, как исправить.
Вы группам присвоили @+id/group1 и @+id/group2
А в коде пытаетесь работать с группами 1 и 2. Замените на R.id.group1 и R.id.group2
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

kateges
Сообщения: 4
Зарегистрирован: 24 дек 2012, 17:50

Re: Урок 15. Контекстное меню

Сообщение kateges » 24 дек 2012, 18:08

asolovey писал(а):Здравствуйте,

Выложите, пожалуйста, кто-то полный код реализации меню через хml, а точнее программную его часть. Что-то никак не могу додуматься.
Спасибо!
У меня получилось так:
mymenucont.xml

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

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <group android:id="@+id/group1">
        <item android:id="@+id/MENU_COLOR_RED" android:orderInCategory="1" android:title='Red'></item>
        <item android:id="@+id/MENU_COLOR_GREEN" android:orderInCategory="2" android:title='Green'></item>
        <item android:id="@+id/MENU_COLOR_BLUE" android:orderInCategory="3" android:title='Blue'></item>
    </group>
    <group android:id="@+id/group2">
        <item android:id="@+id/MENU_SIZE_22" android:orderInCategory="1" android:title="22"></item>
        <item android:id="@+id/MENU_SIZE_26" android:orderInCategory="2" android:title="26"></item>
        <item android:id="@+id/MENU_SIZE_30" android:orderInCategory="3" android:title="30"></item>
    </group>
    

</menu>

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


import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;

public class Main extends Activity {

	  TextView tvColor, tvSize;

	  @Override
	  public void onCreate(Bundle savedInstanceState) {
	    super.onCreate(savedInstanceState);
	    setContentView(R.layout.main);

	    tvColor = (TextView) findViewById(R.id.tvColor);
	    tvSize = (TextView) findViewById(R.id.tvSize);

	    // для tvColor и tvSize необходимо создавать контекстное меню
	    registerForContextMenu(tvColor);
	    registerForContextMenu(tvSize);
	  }

	  public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {

		                switch (v.getId()) {

		                case R.id.tvColor:
		                        getMenuInflater().inflate(R.menu.mymenucont, menu);
		                        menu.setGroupVisible(R.id.group2, false);
                        break;

		                case R.id.tvSize:	                        
		                        getMenuInflater().inflate(R.menu.mymenucont, menu);
		                        menu.setGroupVisible(R.id.group1, false);
		                break;

		                }
		        }
	  
	  @Override
	  public boolean onContextItemSelected(MenuItem item) {

	    switch (item.getItemId()) {
	    // пункты меню для tvColor
	    case R.id.MENU_COLOR_RED:
	      tvColor.setTextColor(Color.RED);
	      tvColor.setText("Text color = red");
	      break;
	    case R.id.MENU_COLOR_GREEN:
	      tvColor.setTextColor(Color.GREEN);
	      tvColor.setText("Text color = green");
	      break;
	    case R.id.MENU_COLOR_BLUE:
	      tvColor.setTextColor(Color.BLUE);
	      tvColor.setText("Text color = blue");
	      break;
	    // пункты меню для tvSize
	    case R.id.MENU_SIZE_22:
	      tvSize.setTextSize(22);
	      tvSize.setText("Text size = 22");
	      break;
	    case R.id.MENU_SIZE_26:
	      tvSize.setTextSize(26);
	      tvSize.setText("Text size = 26");
	      break;
	    case R.id.MENU_SIZE_30:
	      tvSize.setTextSize(30);
	      tvSize.setText("Text size = 30");
	      break;
	    }
	    return super.onContextItemSelected(item);
	  }

}

asolovey
Сообщения: 11
Зарегистрирован: 12 дек 2012, 00:58

Re: Урок 15. Контекстное меню

Сообщение asolovey » 24 дек 2012, 20:11

Спасибо,
Не мог додуматься, как установить видимость каждого из контекстных меню в зависимости от выбора TextView. Теперь понятно

cadmy
Сообщения: 2
Зарегистрирован: 22 дек 2012, 13:05

Re: Урок 15. Контекстное меню

Сообщение cadmy » 25 дек 2012, 13:06

damager82 писал(а): Вы группам присвоили @+id/group1 и @+id/group2
А в коде пытаетесь работать с группами 1 и 2. Замените на R.id.group1 и R.id.group2
Спасибо. Все работает. Но интересует еще один вопрос: Когда мы создавали обычное меню в уроке 14 с помощью xml, мы просто указали идентификатор 1, а теперь указываем R.id.group1. Объясните, пожалуйста, разницу
Урок 14

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

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

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

public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
		switch (v.getId()) {
		case R.id.tvColor:
			
			getMenuInflater().inflate(R.menu.mymenu, menu);
			menu.setGroupVisible(R.id.group2, false);
		break;
		case R.id.tvSize:
			
			getMenuInflater().inflate(R.menu.mymenu, menu);
			menu.setGroupVisible(R.id.group1, false);
		break;
		}
	}

Dangreon
Сообщения: 41
Зарегистрирован: 01 янв 2013, 15:52

Re: Урок 15. Контекстное меню

Сообщение Dangreon » 07 янв 2013, 15:21

Подскажите, почему полученная активность в уроке выглядит не так как у меня, а именно у меня белый фон и на ней 2 textview с текстом черного цвета, в уроке же черный фон и тект textview серого цвета ?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 15. Контекстное меню

Сообщение rezak90 » 07 янв 2013, 16:05

Dangreon писал(а):Подскажите, почему полученная активность в уроке выглядит не так как у меня, а именно у меня белый фон и на ней 2 textview с текстом черного цвета, в уроке же черный фон и тект textview серого цвета ?
скорее всего тема другая, сейчас при создании проекта задается тема (halo light, halo dark - как то так они называются) когда создавался урок такого ещё не было
R.id.team
Политика на форуме запрещена

insider
Сообщения: 13
Зарегистрирован: 30 ноя 2012, 19:40

Re: Урок 15. Контекстное меню

Сообщение insider » 04 фев 2013, 13:02

А мне как-то не нравится реализация через setGroupVisible, потому что когда групп будет больше двух, выключать придется каждую в отдельности, и это будет довольно грязно. Красивее уж, по-моему, всегда инфлейтить отдельное меню. Я прав?

anthyef
Сообщения: 5
Зарегистрирован: 10 фев 2013, 14:09

Re: Урок 15. Контекстное меню

Сообщение anthyef » 11 фев 2013, 01:33

insider писал(а):А мне как-то не нравится реализация через setGroupVisible, потому что когда групп будет больше двух, выключать придется каждую в отдельности, и это будет довольно грязно. Красивее уж, по-моему, всегда инфлейтить отдельное меню. Я прав?
да, как по мне, лучше отдельно инфлейтить.

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

                OnCreateContextMenuListener menuLstnr1 = new OnCreateContextMenuListener ()
		{

			@Override
			public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
			{
				getMenuInflater().inflate(R.menu.mymenu1, menu);
			}
		};
		
		OnCreateContextMenuListener menuLstnr2 = new OnCreateContextMenuListener ()
		{

			@Override
			public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
			{
				getMenuInflater().inflate(R.menu.mymenu2, menu);
			}
		};

anthyef
Сообщения: 5
Зарегистрирован: 10 фев 2013, 14:09

Re: Урок 15. Контекстное меню

Сообщение anthyef » 11 фев 2013, 01:35

Подскажите пожалуйста, а можно ли вместо использования MainActivity в качестве обработчика выбора пункта контекстного меню onContextItemSelected() создавать внутри метода onCreate() объект-обработчик, как делали в уроке 9, когда создавали OnClickListener с описанием метода onClick для обработки нажатий кнопки ?

Ответить