2010-09-04 5 views
0

Я хотел бы добавить переключатели в свое контекстное меню, но я не уверен, как это сделать. Это, как он создается:Добавление RadioButtons в ContextMenu

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

     super.onCreateContextMenu(menu, v, menuInfo); 
     menu.setHeaderTitle("Selection Options"); 
     menu.add(0, v.getId(), 0, "Remove"); 
    } 

ответ

3

из кода:

menu.add(0, v.getId(), 0, "Remove"); 

v представляет собой вид, который может быть RadioButton или любой другой тип Views.

если вы не используете xml для определения RadioButton. вы должны установить его идентификатор в своем приложении.

v.setId();

Или вы можете определить ids.xml в res/values.

образцы/ApiDemos/SRC/COM/пример/Android/APIs/RadioGroup1.java образцы/ApiDemp/RES/значения/ids.xml

Меню & Контекстное меню разработчики руководство:

http://developer.android.com/guide/topics/ui/menus.html

Если вы прокрутите приведенную выше страницу, вы можете найти образец RadioButton в контекстном меню.

Quote образует вышеупомянутую страницу:

Триггерных пункты меню

Меню может быть полезным в качестве интерфейса для поворота варианты включения и выключения, используя флажок для автономных вариантов, или радиокнопки для групп друг друга эксклюзивные опции. На рисунке 2 показано подменю с элементами, которые можно проверить с переключателями.

Примечание: Элементы меню в меню значков (из меню параметров) не могут отображать a флажок или переключатель. Если вы выбрали , выберите пункты меню значков , вы должны указать проверенное состояние, заменив значок и/или текст при каждом изменении состояния .

Вы можете определить отмечаемое поведение для отдельных пунктов меню с помощью андроида: проверяемый атрибут в элементе, или для целой группы с андроида: checkableBehavior атрибут в элементе.Для Например, все элементы в этой группе меню являются проверяемыми с помощью кнопки радио:

> <?xml version="1.0" encoding="utf-8"?> 
> <menu 
> xmlns:android="http://schemas.android.com/apk/res/android"> 
>  <group android:checkableBehavior="single"> 
>   <item android:id="@+id/red" 
>    android:title="@string/red" /> 
>   <item android:id="@+id/blue" 
>    android:title="@string/blue" /> 
>  </group> </menu> The android:checkableBehavior attribute 

принимает либо:

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

При выборе проверяемый элемента, система называет свой соответствующий пунктом выбранного метода обратного вызова (например, onOptionsItemSelected()). Здесь необходимо установить флажок , потому что флажок или радио не изменяет свое состояние автоматически. Вы можете запросить текущее состояние элемента (так как оно было до того, как пользователь его выбрал) с isChecked(), а затем установите проверочное состояние с помощью setChecked(). Например:

> @Override public boolean 
> onOptionsItemSelected(MenuItem item) { 
> switch (item.getItemId()) { case 
> R.id.vibrate: case 
> R.id.dont_vibrate: 
>  if (item.isChecked()) item.setChecked(false); 
>  else item.setChecked(true); 
>  return true; default: 
>  return super.onOptionsItemSelected(item); } 
> } 

Если вы не установите проверенное состояние

этот путь, то видимое состояние из элемента (кнопка флажок или радио ) не изменится, когда пользователь выбирает его. Когда вы устанавливаете состояние, Activity сохраняет зарегистрированное состояние элемента , так что, когда пользователь открывает меню позже, отображается установленное вами состояние , которое вы установили.

Примечание: Checkable пункты меню предназначены для использования только на основе каждого сеанса и не сохраняются после того, как приложение разрушается. Если у вас есть параметры приложения, которые вы хотели бы сохранить для пользователя, вы должны сохранить данные, используя общие Предпочтения.

+0

Я не надувая мой контекстное меню из XML. как я могу это сделать в коде? –

+0

@Sheehan: ответ отредактирован. посмотрите на первую часть. – mhshams

+0

не уверен, если я получу то, что вы имеете в виду. что я установил бы для v.setId()? –

-1
RadioButton rBtn1 = new RadioButton(this); 
RadioButton rBtn2 = new RadioButton(this); 
rBtn1.setText("radio button 1"); 
rBtn2.setText("radio button 2"); 
//Add all your RadioButtons the same way. 

RadioGroup group = new RadioGroup(this); 
group.addView(rBtn1); 
group.addView(rBtn2); 

menu.add(0, group.getId(), 0, "whatever"); 

Я не пробовал, но я надеюсь, что это работает:

Смежные вопросы