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

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

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

Сообщение damager82 » 12 сен 2011, 03:00

В этом уроке мы:

- создадим контекстное меню

Click here to read this article!
Последний раз редактировалось damager82 28 апр 2017, 10:31, всего редактировалось 11 раз.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

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

Сообщение andev » 03 апр 2012, 16:23

В уроке есть реплика
- ContextMenu.ContextMenuInfo – содержит доп.информацию, когда контекстное меню вызвано для элемента списка. Пока мы это не используем, но когда будем изучать списки увидим, что штука полезная.
Возможно я пропустил, но очень хотелось бы увидеть использование этой возможности. Сейчас столкнулся именно с такой задачей - нужно открыть контекстное меню для элемента списка ListView, это получается. А вот получить тот элемент списка на котором клацнули - не выходит.
Подскажите, пожалуйста

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

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

Сообщение damager82 » 04 апр 2012, 10:15

andev писал(а):Возможно я пропустил, но очень хотелось бы увидеть использование этой возможности. Сейчас столкнулся именно с такой задачей - нужно открыть контекстное меню для элемента списка ListView, это получается. А вот получить тот элемент списка на котором клацнули - не выходит.
А урок 51,52 смотрели?
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

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

Сообщение andev » 04 апр 2012, 10:26

Нет, прочел название про CursorAdapter и не предположил, что там может рассматриваться и необходимый мне функционал :)
Спасибо

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

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

Сообщение damager82 » 04 апр 2012, 10:45

Не забывайте про поиск. Он на сайте есть, справа сверху )
Или его там совсем не видно?
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

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

Сообщение andev » 13 апр 2012, 12:40

Так, хорошо, посмотрел, возник другой вопрос
У меня ситуация следующая - в ListView отображен список абонентов, у каждого может быть от 1 до нескольких телефонов.
При щелчке на абоненте мне нужно в случае 1 телефона возвращать через PutExtra этот телефон назад (эта активность вызывается для получения телефона startForResult), а в случае нескольких телефонов нужно показывать что-то наподобие контекстного меню с выбором этих телефонов и при выборе одного из них так же его возвращать.
Следуя логике урока, я должен зарегистрировать мой ListView на создание контекстного меню при помощи registerForContextMenu(lvSimple) и далее все действия производить в нем. Однако, если у меня 1 телефон, то ничего вызывать не нужно и сразу можно его возвращать, т.е. было бы предпочтительнее на ListView слушать onListItemClick(), при выборе пункта определять его и проверять

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

	@Override
	protected void onListItemClick(ListView l, View v, int position, long id) {
		AbonentEntity entity = abonentAdapter.getItem(position);
		int count = entity.getPhonesCount(); 
		
		if (count == 1) {
			String number = entity.getPhones().get(0);
			Intent intent = new Intent();
			intent.putExtra("number", number);
			setResult(RESULT_OK, intent);
			this.finish();
			
		} else if (count > 1) {
			// Создание контекстного меню
		}
Как лучше сделать?

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

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

Сообщение KamiSempai » 13 апр 2012, 13:51

Скорее всего, лучше будет использовать AlertDialog как 62 уроке.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

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

Сообщение andev » 13 апр 2012, 14:01

да вот тоже на него подумал, сейчас попробую реализовать

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

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

Сообщение andev » 13 апр 2012, 14:54

Сделал, но весьма неуклюже, может быть кто-то предложит более простое решение?
http://zalil.ru/33069255

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

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

Сообщение KamiSempai » 13 апр 2012, 16:58

Контекстное меню не на много лучше выглядит. Точнее так же, только без заголовка.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

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

Сообщение andev » 13 апр 2012, 23:19

я не в плане внешнего вида.
первое что беспокоит - передача массива телефонов через переменную класса (есть Bundle args но не совсем понял как использовать)

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

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

Сообщение KamiSempai » 14 апр 2012, 11:18

А зачем переписывать телефоны в массив если можно использовать ArrayAdapter? К тому же список телефонов хранится в ArrayList. Достаточно передать в диалог выбранного абонента (через Bundle args), а он пусть сам достает список телефонов.
Bundle используется почти так же как и Extras, только передается через параметры. Там ничего сложного нет.

Кстати, телефоны как хранятся, случайно не в базе данных?
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

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

Сообщение andev » 14 апр 2012, 18:28

нет, не в БД, подсасываются при каждом включении приложения в коллекцию типа Abonent, т.к. хранить их в БД не вижу никакой практической выгоды.

Alexey
Сообщения: 1
Зарегистрирован: 22 май 2012, 23:35

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

Сообщение Alexey » 22 май 2012, 23:59

В данный момент контекстное меню всплывает в одном и том же месте - чуть ниже "Text size".
А как сделать, чтобы контекстное меню для "Text color" всплывало чуть ниже "Text color", а для "Text size" - чуть ниже "Text size"?

alex6999
Сообщения: 13
Зарегистрирован: 29 май 2012, 18:50

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

Сообщение alex6999 » 29 май 2012, 19:05

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

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

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

Сообщение AndreyI » 29 май 2012, 21:13

alex6999 писал(а):подскажите, у мен куча EditText и я всем им повесил одинаковое меню
как мне теперь определить из какого EditText было вызванно меню?
В вызов onCreateContextMenu (ContextMenu menu, View v, ContextMenuInfo menuInfo) передается объект View v-это и есть тот объект с которого пришел вызов контекстного меню, в вашем случае EditText

alex6999
Сообщения: 13
Зарегистрирован: 29 май 2012, 18:50

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

Сообщение alex6999 » 29 май 2012, 21:44

но обрабатываю я нажатие в onContextItemSelected(MenuItem item)
где тут view?

хотя....
правильно-ли понял, onCreateContextMenu вызывается каждый раз при долгом нажии пальцем и мне надо просто запомнить обьект в переменную и потом пользоватся этой переменной в onContextItemSelected?
немного корявенько.

однако, если onCreateContextMenu вызывается при вызове registerForContextMenu, то такой метод не сработает.

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

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

Сообщение AndreyI » 29 май 2012, 21:55

alex6999 писал(а):но обрабатываю я нажатие в onContextItemSelected(MenuItem item)
где тут view?

хотя....
правильно-ли понял, onCreateContextMenu вызывается каждый раз при долгом нажии пальцем и мне надо просто запомнить обьект в переменную и потом пользоватся этой переменной в onContextItemSelected?
немного корявенько.
Если нужно производить действия над объектом из которого вызвано контекстное меню, похоже так и нужно сделать. Разрабы не посчитали нужным передавать объект в обработчик выбора пунктов.

alex6999
Сообщения: 13
Зарегистрирован: 29 май 2012, 18:50

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

Сообщение alex6999 » 29 май 2012, 22:10

спасибо, заработало.

danik
Сообщения: 3
Зарегистрирован: 07 июл 2012, 12:48
Откуда: где? где? в Караганде!

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

Сообщение danik » 07 июл 2012, 13:07

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

У меня ругается
public void onCreateContextMenu(ContextMenu ...

пишет, что void не подходит для onCreateContextMenu, но если уберу void, то дает пять быстрых решений

create class "ContextMenu" in package "onCreateContextMenu"
create interface {the same}
create enum {the same}
change to onCreateCOntextMenuListener(android.view.View)
fix setup

Ответить