2013-06-05 16 views
10

Czy istnieje sposób uzyskania identyfikatora Androida dla pozycji menu? Widzę getTitle(), ale nie getId(). Interesuje mnie wartość identyfikatora "menu_printer_settings" zamiast wartości tytułu "printer_settings" i identyfikator pozycji menu (getItemId()). Potrzebuję tego identyfikatora, aby moje skrypty Monkey Talk działały również na zlokalizowane kompilacje.Jak uzyskać identyfikator Androida dla pozycji menu w systemie Android?

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
<item 
    android:id="@+id/menu_printer_settings"   
    android:title="@string/printer_settings" 
/> 

+0

Czy ['menuItem.getItemId()'] (http://developer.android.com/reference/android/view/MenuItem.html#getItemId()) nie działa? –

+0

@Adil, Tak, zwraca liczbę całkowitą, Chcę uzyskać ciąg ID "menu_printer_settings" – Harish

Odpowiedz

0

rozwiązany poprzez pobranie wszystkich pól dla paczki

 Map<Integer, String> idMap = new HashMap<Integer, String>(); 
     Class<?> r; 
     String rClass = activity.getBaseContext().getApplicationContext().getPackageName() 
       + ".R$id"; 
     try { 
      r = Class.forName(rClass); 
     } catch (ClassNotFoundException e1) { 
      Log.log("Unable to load " + rClass + ": " + e1.getMessage()); 
      return idMap; 
     } 
     for (Field f : r.getFields()) { 
      int val; 
      try { 
       val = f.getInt(null); 
      } catch (Exception e) { 
       throw new IllegalStateException("Unable to get value for " + f.getName() + ": " 
         + e.getMessage()); 
      } 
      idMap.put(val, f.getName()); 

     } 
7

Spróbuj tego:

public boolean onOptionsItemSelected(MenuItem item) { 

      switch (item.getItemId()) { 

      case R.id.menu_printer_settings: 
        //do what you want 
        break; 
       } 
} 
+0

Czy mogę programowo wprowadzić nazwę ciągu znaków "menu_printer_settings"? – Harish

+0

jest to proste: item.getTitle() – Jarvis

+0

tytuł i ciąg ID są różne. Tytuł to "printer_settings", ale interesuje mnie ciąg ID "menu_printer_settings", który jest zdefiniowany w pliku XML. – Harish

11

Porada1:

MenuItem item 

String[] id = getResources().getResourceName(item.getItemId()).split("\\/"); 

uzyskiwać dostęp id [1]

Solution2:

Zastosowanie titleCondensed dopasować id np.

<menu> 
      <item android:id="@+id/myid" 
        android:title="some menu title" 
        android:titleCondensed="myid"/> 
... 
</menu> 

następnie

String selectedMenuIdString = (String) item.getTitleCondensed(); 

Wolę Rozwiązanie 1 ponieważ nie muszę powtarzać nazwę id.

Mam nadzieję, że to pomoże. Pozdrawiam Steve