Страница 1 из 9

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

Добавлено: 12 сен 2011, 03:00
damager82
В этом уроке мы:

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

Click here to read this article!

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

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

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

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

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

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

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

Добавлено: 04 апр 2012, 10:45
damager82
Не забывайте про поиск. Он на сайте есть, справа сверху )
Или его там совсем не видно?

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

Добавлено: 13 апр 2012, 12:40
andev
Так, хорошо, посмотрел, возник другой вопрос
У меня ситуация следующая - в 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) {
			// Создание контекстного меню
		}
Как лучше сделать?

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

Добавлено: 13 апр 2012, 13:51
KamiSempai
Скорее всего, лучше будет использовать AlertDialog как 62 уроке.

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

Добавлено: 13 апр 2012, 14:01
andev
да вот тоже на него подумал, сейчас попробую реализовать

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

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

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

Добавлено: 13 апр 2012, 16:58
KamiSempai
Контекстное меню не на много лучше выглядит. Точнее так же, только без заголовка.

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

Добавлено: 13 апр 2012, 23:19
andev
я не в плане внешнего вида.
первое что беспокоит - передача массива телефонов через переменную класса (есть Bundle args но не совсем понял как использовать)

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

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

Кстати, телефоны как хранятся, случайно не в базе данных?

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

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

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

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

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

Добавлено: 29 май 2012, 19:05
alex6999
подскажите, у мен куча EditText и я всем им повесил одинаковое меню
как мне теперь определить из какого EditText было вызванно меню?

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

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

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

Добавлено: 29 май 2012, 21:44
alex6999
но обрабатываю я нажатие в onContextItemSelected(MenuItem item)
где тут view?

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

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

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

Добавлено: 29 май 2012, 21:55
AndreyI
alex6999 писал(а):но обрабатываю я нажатие в onContextItemSelected(MenuItem item)
где тут view?

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

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

Добавлено: 29 май 2012, 22:10
alex6999
спасибо, заработало.

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

Добавлено: 07 июл 2012, 13:07
danik
Здравстуйте!

У меня ругается
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