2012-03-17 2 views
0

Моя проблема заключается в том, как переключиться из контекстного меню, чтобы исправить активность.Переключение из контекстного меню, чтобы исправить активность

у меня есть такие мероприятия:

  • Main
  • AccelerometerOptionsActivity
  • GyroscopeOptionsActivity
  • OrientationOptionsActivity

В основной деятельности у меня есть список датчиков. Когда я нажимаю на сенсор, появляется контекстное меню, где я могу щелкнуть, например. Опции.

Моя проблема заключается в том, как переключиться из контекстного меню в режим действия выбранного датчика. Мой код:

@Override 
    public boolean onContextItemSelected(MenuItem item) { 
     AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo(); 
     int menuItemIndex = item.getItemId(); 
     String[] menuItems = getResources().getStringArray(R.array.sensor_array); 
     String menuItemName = menuItems[menuItemIndex]; 


     if(item.getTitle()=="Start Service"){ 
      Toast.makeText(this,"Start " + menuItemName+ " selected", Toast.LENGTH_SHORT).show(); 
     } else if(item.getTitle()=="Stop Service") { 
      Toast.makeText(this,"Stop " + menuItemName+ " selected", Toast.LENGTH_SHORT).show(); 
     } else if(item.getTitle()=="Options") { 


       Intent options = new Intent(this, AccelerometerOptionsActivity.class); 
       startActivity(options); 

     } 

     return true; 
    } 

UPDATE:

Вот код:

@Override 
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
     if (v.getId()==R.id.list) { 
      AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo; 

      menu.setHeaderTitle(sensorsArray[info.position]); 
      menu.add(Menu.NONE, CONTEXTMENU_START, 0, "Start Service"); 
      menu.add(Menu.NONE, CONTEXTMENU_STOP, 1, "Stop Service"); 
      menu.add(Menu.NONE, CONTEXTMENU_OPTIONS, 2, "Options"); 
      menu.add(Menu.NONE, CONTEXTMENU_GRAPHS, 3, "Graph view"); 
      menu.add(Menu.NONE, CONTEXTMENU_DATA, 4, "Data view"); 
     } 
    } 
+0

У вас есть 'ListView' с датчиками, на которых (список) вы установите' ContextMenu' ? – Luksprog

+0

Отправьте код, в котором отображается контекстное меню. –

+0

Да У меня есть ListView с датчиками, когда я нажимаю имя датчика, появляется ContextMenu. Я добавляю код в вышеупомянутый вопрос. – erni

ответ

0

Попробуйте это в вашем onContextItemSelected():

@Override 
    public boolean onContextItemSelected(MenuItem item) { 
     AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item 
        .getMenuInfo(); 
     int menuItemIndex = item.getItemId(); // the position of the item in the list with the context menu 
     String[] menuItems = getResources().getStringArray(R.array.sensor_array); 
     String menuItemName = menuItems[menuItemIndex]; 
     switch (item.getItemId()) { 
     case CONTEXTMENU_START: 
      Toast.makeText(this, "Start " + menuItemName + " selected", 
         Toast.LENGTH_SHORT).show(); 
     break; 
     case CONTEXTMENU_STOP: 
      Toast.makeText(this, "Stop " + menuItemName + " selected", 
        Toast.LENGTH_SHORT).show(); 
     break; 
      case CONTEXTMENU_OPTIONS: 
     // here start the correct options activity either by checking for 
     // String equality with menuItemName or by doing a switch on the menuItemIndex(this works 
     // if your list of sensors is based on the array R.array.sensor_array) 
      switch (menuItemIndex) { 
       case 0: 
       //the user clicked the first sensor in the list so start that option activity   
       break; 
       case 1: 
       //the user clicked the second sensor in the list so start that option activity 
        break; 
       } 
     } 
     return super.onContextItemSelected(item); 
} 
+0

Я пробовал ваше решение, но оно не работает. Я отлаживаю код, и он отключает оператор switch. – erni

+0

@erni В моем коде выше замените 'int menuItemIndex = item.getItemId();' с 'int menuItemIndex = info.position;' – Luksprog

+0

спасибо, что он работает !!! – erni

0

Используйте .Contains метод (yourString) вместо ==. , например. Заменить

if(item.getTitle()=="Options") {... 

с

if(item.getTitle().contains("Options") {... 
+0

Я изменил это, чтобы переключиться. Но это не моя проблема. Моя проблема - добраться до надлежащей Деятельности. – erni

+0

Ваш код выглядит отлично, за исключением этого == part. Замените его и посмотрите. Попытайтесь отлаживать, если это возможно, и посмотрите, ударил ли он точку останова. Если вы получаете какое-либо исключение или что-то в этом роде, поставьте журнал с лог-катом на свой вопрос. – Rajkiran

+0

Я думаю, что вы не понимаете мою проблему. Я хочу, чтобы меня направили на надлежащие операции с параметрами, например. Я выбираю акселерометр и из контекстного меню хочу перейти к параметрам акселерометра. Я выбираю службу ориентации и из контекстного меню я хочу перейти к параметрам ориентации и т. Д. == эта часть работает нормально. С уважением – erni