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

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

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

Сообщение danik » 09 июл 2012, 15:03

Все, решил проблему. Не закрыл фигурной скобкой перед своей "проблемой".

dmOx
Сообщения: 1
Зарегистрирован: 13 июл 2012, 17:28

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

Сообщение dmOx » 13 июл 2012, 17:32

Почему Вы постоянно стараетесь уйти от описания UI в XML. Гайды от Goolge рекомендуют именно этот подход, в последствии изменять будет проще, без перекомпиляции.
ИМХО Лучше сразу привыкать к правильному

MyActivity.java

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

        tvColor.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() {
            @Override
            public void onCreateContextMenu(ContextMenu contextMenu, View view, ContextMenu.ContextMenuInfo contextMenuInfo) {
                MenuInflater inflater = getMenuInflater();
                inflater.inflate(R.menu.color_context_menu, contextMenu);
                contextMenu.setHeaderTitle(R.string.color_context_menu_header);
            }
        });
color_context_menu.xml

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

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_color_red" android:title="Красный"/>
    <item android:id="@+id/menu_color_blue" android:title="Синий"/>
    <item android:id="@+id/menu_color_green" android:title="Зеленый"/>
</menu>

Daniil
Сообщения: 25
Зарегистрирован: 15 июл 2012, 13:01

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

Сообщение Daniil » 19 июл 2012, 12:52

Вспоминаем наш урок по обработчикам и смотрим хелп по методу setOnCreateContextMenuListener (View.OnCreateContextMenuListener l). Получается, что View в качестве обработчика создания контекстного меню использует объект this. В данном случае, этот код в Activity, значит this – это Activity и есть. Т.е. когда View хочет показать контекстное меню, оно обращается к обработчику (Activity), а он уже выполняет свой метод onCreateContextMenu. Т.е. тот же самый принцип, что и при обычном нажатии (Click).
В данном абзаце ссылка
наш урок по обработчикам
грузит страницу "About" .

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

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

Сообщение damager82 » 19 июл 2012, 13:12

Daniil писал(а):В данном абзаце ссылка
наш урок по обработчикам
грузит страницу "About" .
Спасибо, пофиксил!
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

math64
Сообщения: 235
Зарегистрирован: 16 июл 2012, 07:47

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

Сообщение math64 » 29 июл 2012, 23:50

Не получается вызвать контекстное меню для ImageButton в PopupWindow.

Sevak
Сообщения: 6
Зарегистрирован: 08 авг 2012, 14:41

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

Сообщение Sevak » 08 авг 2012, 15:04

Классные уроки! Спасибо большое, damager82 :) Только иногда не все с первого раза понятно, наверное потому что с java плохо знаком, буду учить)
Вот что получилось

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

package com.example.contextmenu;

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

public class MainActivity extends Activity {
	  final int MENU_COLOR_RED = 1;
	  final int MENU_COLOR_GREEN = 2;
	  final int MENU_COLOR_BLUE = 3;
	  
	  final int MENU_SIZE_22 = 4;
	  final int MENU_SIZE_26 = 5;
	  final int MENU_SIZE_30 = 6;
	  
	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);
        
        registerForContextMenu(tvColor);
        registerForContextMenu(tvSize);
    }
           
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuinfo){
    switch (v.getId()){
    
    case R.id.tvColor:
    menu.add(0, MENU_COLOR_RED, 0, "RED");
    menu.add(0, MENU_COLOR_GREEN, 0, "GREEN");
    menu.add(0, MENU_COLOR_BLUE, 0, "BLUE");
    break;
    case R.id.tvSize:
        menu.add(0, MENU_SIZE_22, 0, "22");
        menu.add(0, MENU_SIZE_26, 0, "26");
        menu.add(0, MENU_SIZE_30, 0, "30");
        break;

    }
    }
    public boolean onContextItemSelected(MenuItem item){
    	switch (item.getItemId()){
    	case MENU_COLOR_RED:
    		tvColor.setTextColor(Color.RED);
    		Toast.makeText(this, "Text color - RED!", Toast.LENGTH_SHORT).show();
    		break;
    	case MENU_COLOR_GREEN:
    		tvColor.setTextColor(Color.GREEN);
    		Toast.makeText(this, "Text color - GREEN!", Toast.LENGTH_SHORT).show();
    		break;	
    	case MENU_COLOR_BLUE:
    		tvColor.setTextColor(Color.BLUE);
    		Toast.makeText(this, "Text color - BLUE!", Toast.LENGTH_SHORT).show();
    		break;
    	case MENU_SIZE_22:
    		tvSize.setTextSize(22);
    		Toast.makeText(this, "Text size - 22!", Toast.LENGTH_SHORT).show();
    		break;
    	case MENU_SIZE_26:
    		tvSize.setTextSize(26);
    		Toast.makeText(this, "Text size - 26!", Toast.LENGTH_SHORT).show();
    		break;
    	case MENU_SIZE_30:
    		tvSize.setTextSize(30);
    		Toast.makeText(this, "Text size - 30!", Toast.LENGTH_SHORT).show();
    		break;
    		
    	}
		return super.onContextItemSelected(item);
    	
    }

    }

Аватара пользователя
Finch
Сообщения: 439
Зарегистрирован: 16 июл 2012, 21:37

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

Сообщение Finch » 09 авг 2012, 01:04

скок левой писанины в коде =) xml юзай
CEO of a company R.id.team

Аватара пользователя
chuikoff
Сообщения: 17
Зарегистрирован: 30 мар 2012, 10:20
Откуда: Камчатка
Контактная информация:

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

Сообщение chuikoff » 25 сен 2012, 09:25

скок левой писанины в коде =) xml юзай
Я вот заюзал xml, и не могу понять как обрабатывать нажатия. item.getItemId() выдают fasle. в итоге никакого действия не происходит при выборе пункта контекстного меню.
Разработка сайтов любой сложности.

temna
Сообщения: 4
Зарегистрирован: 25 сен 2012, 12:33

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

Сообщение temna » 25 сен 2012, 12:40

Вместо

case MENU_COLOR_BLUE:

нужно писать:

case R.id.menu_item_id: (тот Id который вы прописали в Xml)

Тут все подробно описано http://developer.android.com/guide/topics/ui/menus.html

Ololok
Сообщения: 5
Зарегистрирован: 05 окт 2012, 08:01

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

Сообщение Ololok » 25 окт 2012, 19:41

Доброе время суток!

Появилась проблема: где комментарий , там eclipse выдает ошибку.

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

package ru.startandroid.develop.contextmenu;

import android.R;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {
	TextView tvSize, tvColor;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); //activity_main cannot be resovled or is not a field
        
        tvColor = (TextView) findViewById(R.id.tvColor); //аналогичный текст ошибки только для tvColor
        tvSize = (TextView) findViewById(R.id.tvSize);   // и tvSize хотя в R.java id присутствует 

        registerForContextMenu(tvColor);
        registerForContextMenu(tvSize);
        
        
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu); //здесь тоже, для menu 
        return true;
    }

    
}
Ума не приложу в чем дело.

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

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

Сообщение AndreyI » 25 окт 2012, 19:45

уберите строку import android.R;

Ololok
Сообщения: 5
Зарегистрирован: 05 окт 2012, 08:01

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

Сообщение Ololok » 25 окт 2012, 19:50

AndreyI писал(а):уберите строку import android.R;
Спасибо, чувствую себя не много глупо

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

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

Сообщение AndreyI » 25 окт 2012, 20:57

Да ничего страшного, многие на этом спотыкаются поначалу.

grinbo
Сообщения: 1
Зарегистрирован: 08 авг 2012, 23:26

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

Сообщение grinbo » 01 ноя 2012, 11:35

Здравствуйте!
Ругается при попытке добавления контекстного меню методом add в onCreateContextMenu(...). add подсвечивается красным и выпадает сообщение: The method add(int, int, int, String) is undefined for the type ContextMenu. Из-за чего это может быть? Вроде весь импорт который надо сделал:
import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;

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

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

Сообщение damager82 » 02 ноя 2012, 14:10

grinbo писал(а):Здравствуйте!
Ругается при попытке добавления контекстного меню методом add в onCreateContextMenu(...). add подсвечивается красным и выпадает сообщение: The method add(int, int, int, String) is undefined for the type ContextMenu. Из-за чего это может быть? Вроде весь импорт который надо сделал:
import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
Это весь импорт? А где import android.view.ContextMenu ?
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

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

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

Сообщение Foenix » 03 ноя 2012, 19:07

Здравствуйте!
Объясните, а то я уже запуталась..
читала на девелопер.андроид, что контекстное меню уже устарело, и надобно использовать менюшку Action Bar, ту что сверху, и оно может складываться - справа кнопочка с точками, по которой выпадает список не поместившихся пунктов. Это все понятно.
Но когда читаю об этом новом меню, там же говорят, что в пункты этого меню лучше помещать элементы-команды, которые касаются активити глобально, т.е. предполагаемые глобальные действия, а не действия с отдельными элементами экрана (тут я понимаю, что это относится и к строчкам листвью). Т.е. например я понимаю, что туда лучше положить пункт "настройки" или "поиск", а вот действия с элементами списка, которые раньше были в контекстном меню - куда теперь девать??
Хочется вместо контекстного внизу иметь панельку с кнопками, похожую на ActionView, но запихивать туда команды локальные, к строчкам списка - создатЬ, удалить, отредактировать пункт списка.
Каким элементом дизайна это правильно осуществить?
Еще что-то об этом нписано тут http://developer.android.com/design/pat ... ction.html
Но я не пойму - как этот Contextual Action Bar совмещается с Action Bar? ведь для пользователя это не очевидно, что меню по трем точкам изменилось. Ну, допустим, оно изменилось, в нем исчезли пункты "справка" или "поиск", и теперь там "удалить" или "создать". Как же пользователю вызвать "справку"? не отменять же выделение..
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, 19:41

голова кругом =) конкретней что вы хотите? а то сначала хотите актионбар, потом не хотите. Потом я понял что вам нужна нижняя панелька с кнопочками. Создаёте контролл и присоединяете его к той активити что хотите.
R.id.team
Политика на форуме запрещена

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

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

Сообщение Foenix » 03 ноя 2012, 19:56

Я хочу понять как так хитро заменили контекстное меню на Contextual Action Bar
и как он сочетается с Action Bar для начала.
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, 21:09

Contextual Action Bar у него если не ошибаюсь 11 апи
вот как его делать http://developer.android.com/guide/topi ... ntext-menu
R.id.team
Политика на форуме запрещена

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

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

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

я это читала, смысл не в этом.
Поясню еще раз. У нас имеется активити со списком и один экшнбар с элементами меню - типа "настройка", "помощь", "..." т.е. глобальные для активити.
Я выделяю парочку элементов (или один) списка. По-старому я бы вызывала контекстное меню. А андроиддевелоперы говорят - не... устарело! надо вызывать контекстный экшнбар. Вот в чем вопрос, теперь после нажатия на кнопочку с точками пользователю вывалится (по тому, как я поняла!) совсем другое меню- "удалить" "отправить" "сохранить" "поделиться"
Вот я и спрашиваю так это или не так?
а если так, то по-моему как-то странно! выделил допустим пользователь пару строчек списка и хочет справку глянуть, а она тю-тю.. надо выделение снимать и жать на меню.
Так понятно?
Странно это, поэтому я и думаю - что я где-то ошиблась, может английский не так поняла, информации-то много. А реализовать я успею. Не хочется реализовывать то, что меня потом не устроит.
R.id.team

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

Ответить