Урок 15. Контекстное меню
Re: Урок 15. Контекстное меню
Народ кто нибудь ответит мне?
Re: Урок 15. Контекстное меню
подскажите пожалуйста как закрепить группу меню за определенным View элементом
Re: Урок 15. Контекстное меню
смысла нет это делать, ты пойми. Почитай гайдлайны гугла, ты хочешь с десктопного поведения, где была правая клавиша мыши и контекстное меню - перетащить это в андроид. Это не верно. Нужно делать единообразные по функционалу приложения, чтобы пользователь знал чего от него ожидать и как им пользоваться без инструкций.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 15. Контекстное меню
Почему нет смысла? разве у каждого View элемента не может быть свое контекстное меню? тогда как мне это реализовать?Foenix писал(а):смысла нет это делать, ты пойми. Почитай гайдлайны гугла, ты хочешь с десктопного поведения, где была правая клавиша мыши и контекстное меню - перетащить это в андроид. Это не верно. Нужно делать единообразные по функционалу приложения, чтобы пользователь знал чего от него ожидать и как им пользоваться без инструкций.
Re: Урок 15. Контекстное меню
я же сказала - у гугла посмотриbetirsolt писал(а):тогда как мне это реализовать?
http://developer.android.com/index.html
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 15. Контекстное меню
Не совсем понял вопроса. Вроде же в коде есть условие выбора элемента. Хотя может быть нерабочее, я уже давно не работал с этим меню. В принципе завтра смогу глянуть, если чуть поподробнее проблему опишут.
Re: Урок 15. Контекстное меню
это все из урока про контекстное менюMikhail_dev писал(а): Не совсем понял вопроса. Вроде же в коде есть условие выбора элемента. Хотя может быть нерабочее, я уже давно не работал с этим меню. В принципе завтра смогу глянуть, если чуть поподробнее проблему опишут.
вот код из MainActivity
Код: Выделить всё
package com.example.p0151_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.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
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
protected 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);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
getMenuInflater().inflate(R.menu.mymenu, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item){
switch(item.getItemId()){
//Пункты меню для tvColor
case MENU_COLOR_RED:
tvColor.setTextColor(Color.RED);
tvColor.setText("Text color = Red");
break;
case MENU_COLOR_GREEN:
tvColor.setTextColor(Color.GREEN);
tvColor.setText("Text color = Green");
break;
case MENU_COLOR_BLUE:
tvColor.setTextColor(Color.BLUE);
tvColor.setText("Text color = Blue");
break;
//пункты меню для tvSize
case MENU_SIZE_22:
tvSize.setTextSize(22);
tvSize.setText("Text size = 22");
break;
case MENU_SIZE_26:
tvSize.setTextSize(26);
tvSize.setText("Text size = 26");
break;
case MENU_SIZE_30:
tvSize.setTextSize(30);
tvSize.setText("Text size = 30");
break;
}
return super.onContextItemSelected(item);
}
}
Код: Выделить всё
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<TextView
android:id="@+id/tvColor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="50dp"
android:layout_marginTop="50dp"
android:text="Text Color"
android:textSize="26sp" />
<TextView
android:id="@+id/tvSize"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Text Size"
android:textSize="22sp" />
</LinearLayout>
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<group android:id="@+id/ColorGroup">
<item
android:id="@+id/MENU_COLOR_GREEN"
android:title="Green"/>
<item
android:id="@+id/MENU_COLOR_RED"
android:title="Red"/>
<item
android:id="@+id/MENU_COLOR_BLUE"
android:title="Blue"/>
</group>
<group android:id="@+id/SizeGroup">
<item
android:id="@+id/MENU_SIZE_22"
android:title="22"/>
<item
android:id="@+id/MENU_SIZE_26"
android:title="26"/>
<item
android:id="@+id/MENU_SIZE_30"
android:title="30"/>
</group>
</menu>
Re: Урок 15. Контекстное меню
Вы не реализовали метод onCreateContextMenu.в данном случае у меня при длительном нажатии на обоих TextView показывается полное меню из 6 пунктов, а мне нужно чтоб при нажатии на TextView tvColor показывались пункты меню отвечающие за цвет, т.е только 3 пункта из моего меню, и для tvSize точно так же, и еще при нажатии на пункты меню не меняется ничего, цвет текста, размер и сам текст, надеюсь так понятно?
Re: Урок 15. Контекстное меню
вот же у меня есть этот методDonart писал(а):
Вы не реализовали метод onCreateContextMenu.
Код: Выделить всё
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
getMenuInflater().inflate(R.menu.mymenu, menu);
}
Re: Урок 15. Контекстное меню
Вы его просто пропустили, смотрите урок там все есть. Имею ввиду пропустили реализацию из урокаа как его еще реализовать? что дописать?
Re: Урок 15. Контекстное меню
по уроку делается не так, по уроку я сделал и все работает, просто автор порекомендовал в конце урока сделать эти меню через файл menu.xml самостоятельно, вот я и пытаюсьDonart писал(а):Вы его просто пропустили, смотрите урок там все есть. Имею ввиду пропустили реализацию из урокаа как его еще реализовать? что дописать?
Re: Урок 15. Контекстное меню
Хотелось бы конечно иметь возможность создавать несколько блоков меню в одном xml и вызывать их по одному. Но, полистав гид разрабов понял, что такого не предусмотрено. Ажаль. Стало быть, только 2 варианта: либо отдельный xml под каждое меню, либо каждый раз тащить всё меню целиком, стыдливо прикрывая неактуальные группы. Прокомментируйте пожалуйста, правильно ли я понял ?
В теме зелен, но желание научиться велико. Так что, поучайте и журите сейчас, пока есть такая аказия ; )
Re: Урок 15. Контекстное меню
Такой вопрос к знатокам: возможно ли в onContextItemSelected прописать действие, ну скажем, изменение текста, но не конкретного view, как сделано в уроке:
а того view, при нажатии на который и было вызвано контекстное меню?
Иными словами, в моем приложении - сотни TextView, и задумано, чтобы пользователь, нажимая на любой из них, получал Контекстное меню, и в зависимости от выбранного пункта - меняется текст в этом самом TextView.
Я конечно, мог бы для каждого TextView создать отдельное контекстное меню, как это сделано в уроке, но в этом был бы смысл, если бы они были различны по сути. У меня же - все контекстные менюшки одинаковы.
И мне кажется, есть способ проще, чем прописывать сотню раз case/break'и...
Для наглядности, отрывок из кода:
тут всего 2 TextViewa, но как видно, Контекстное меню и результат нажатия - идентичен. И этот код занимает 50 строк, а для пары сотен это будет уже 5000 .О.о.
Неужели нет способа сделать проще? Применять одно "шаблонное" контекстное меню ко всем view, и результат возвращать в это самое view?
Если контекстное меню не подходит для этих целей, будьте добры, направьте на путь истинный.
Код: Выделить всё
tvColor.setTextColor(Color.GREEN);
tvColor.setText("Text color = green");
Иными словами, в моем приложении - сотни TextView, и задумано, чтобы пользователь, нажимая на любой из них, получал Контекстное меню, и в зависимости от выбранного пункта - меняется текст в этом самом TextView.
Я конечно, мог бы для каждого TextView создать отдельное контекстное меню, как это сделано в уроке, но в этом был бы смысл, если бы они были различны по сути. У меня же - все контекстные менюшки одинаковы.
И мне кажется, есть способ проще, чем прописывать сотню раз case/break'и...
Для наглядности, отрывок из кода:
Код: Выделить всё
//опишем создание контекстных меню
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
switch (v.getId()) {
//менюшка для первой textview
case R.id.ball1_1:
menu.add(0, 1, 0, "1 балл");
menu.add(0, 2, 0, "2 балла");
menu.add(0, 3, 0, "3 балла");
break;
case R.id.ball1_2:
//менюшка для второй textview, абсолютно идентичное
menu.add(0, 4, 0, "1 балл");
menu.add(0, 5, 0, "2 балла");
menu.add(0, 6, 0, "3 балла");
break;
}
}
//обработчик нажатия пунктов меню
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
// пункты меню для 1 textview
case 1:
numball1_1=1;
tvball1_1.setText(Integer.toString(numball1_1));
break;
case 2:
numball1_1=2;
tvball1_1.setText(Integer.toString(numball1_1));
break;
case 3:
numball1_1=3;
tvball1_1.setText(Integer.toString(numball1_1));
break;
// пункты меню для 2 textview
case 4:
numball1_2=1;
tvball1_2.setText(Integer.toString(numball1_2));
break;
case 5:
numball1_2=2;
tvball1_2.setText(Integer.toString(numball1_2));
break;
case 6:
numball1_2=3;
tvball1_2.setText(Integer.toString(numball1_2));
break;
}
tvitog1.setText(Integer.toString(numball1_1+numball1_2));
return super.onContextItemSelected(item);
}
Неужели нет способа сделать проще? Применять одно "шаблонное" контекстное меню ко всем view, и результат возвращать в это самое view?
Если контекстное меню не подходит для этих целей, будьте добры, направьте на путь истинный.
Re: Урок 15. Контекстное меню
ох уж эти любители сотен текствью..
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 15. Контекстное меню
Foenix, рад услышать советы, чем их можно заменить)
Приложение - таблица, состоящая из этих сотен TV, ума не приложу, как можно реализовать это по другому, с возможностью интерактива на каждом элементе.
Ну и, собственно, хотелось бы услышать предположения по моему вопросу о "шаблонном" контекстном меню или его альтернативе.
Сегодня вечером посмотрю, получится ли нечто подобное с диалогами. Если нет - придется увеличить код на несколько тысяч строк в onContextItemSelected....
Приложение - таблица, состоящая из этих сотен TV, ума не приложу, как можно реализовать это по другому, с возможностью интерактива на каждом элементе.
Ну и, собственно, хотелось бы услышать предположения по моему вопросу о "шаблонном" контекстном меню или его альтернативе.
Сегодня вечером посмотрю, получится ли нечто подобное с диалогами. Если нет - придется увеличить код на несколько тысяч строк в onContextItemSelected....
Re: Урок 15. Контекстное меню
Возможно вам подойдет создание dialog-а (alert dialog) типа указываешь макет xml который заранее подготовил (или используешь какой-нибудь стандартный) допустим в своем макете 3 кнопки. Потом создаешь диалог по своему макету(очень легко гуглится ). когда диалог готов можно его вызвать методом .show(). Когда вызывать? по лонг клику OnLongClickListener, т.е. будет как контекстное меню. И еще во время создания диалога (до вызова show) можно назначить кнопкам обработчики (собсна поменять цвет или еще что-то..).
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Re: Урок 15. Контекстное меню
ListView нужно использовать, а не сотни TextView
Контекстное меню устарело, необходимо использовать контекстный режим ActionBar. Как его делать в соотствествии с листвью - в сети куча туториалов. А ты изобретаешь велосипед. Так уже лет 15 никто не программирует, наверное.
Контекстное меню устарело, необходимо использовать контекстный режим ActionBar. Как его делать в соотствествии с листвью - в сети куча туториалов. А ты изобретаешь велосипед. Так уже лет 15 никто не программирует, наверное.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 15. Контекстное меню
По поводу сотен TV - это более наглядный вариант отображения моих данных, как мне кажется.
В любом случае, вот решение моей проблемы:
http://ogrelab.ikratko.com/identifying- ... ed-method/
Но возник новый казус...жду Вас в теме viewtopic.php?f=47&p=36741#p36741
В любом случае, вот решение моей проблемы:
http://ogrelab.ikratko.com/identifying- ... ed-method/
Но возник новый казус...жду Вас в теме viewtopic.php?f=47&p=36741#p36741
Re: Урок 15. Контекстное меню
Добрый день! Спасибо за урок, мне очень помогло. Но, у меня есть вопрос. Как отображать контекстного меню за один клик в listview? Вот мой исходник, все что написала. Но он не показывает контекстное меню.
Код: Выделить всё
public class Day extends ListFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
DayAdapter myListAdapter = new DayAdapter(getActivity(), R.layout.text_fragment, names);
setListAdapter(myListAdapter);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView =inflater.inflate(R.layout.listview, container, false);
ListView lv = (ListView)rootView.findViewById(android.R.id.list);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
registerForContextMenu(view);
}
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {
menu.setHeaderTitle("Hello");
menu.setHeaderIcon(R.drawable.up);
menu.add(0, 0, 0, "Item One");
menu.add(0, 1, 0, "Item Two");
}
});
return rootView;
}
}
Re: Урок 15. Контекстное меню
registerForContextMenu(view);
это надо делать не в теле данного метода
и лучше не делать контекстное меню - это уже раритет, а воспользоваться ActionMode, он появляется по лонгклику
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
...
mActionMode = getActivity().startActionMode(mActionModeCallback);
...}
это надо делать не в теле данного метода
и лучше не делать контекстное меню - это уже раритет, а воспользоваться ActionMode, он появляется по лонгклику
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
...
mActionMode = getActivity().startActionMode(mActionModeCallback);
...}
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198