2013-06-05 47 views
10

Có cách nào để lấy ID Android cho một mục menu không? Tôi có thể thấy getTitle() nhưng không thấy getId(). Tôi quan tâm đến giá trị ID "menu_printer_settings" thay vì giá trị tiêu đề "printer_settings" và ID mục menu (getItemId()). Tôi cần ID này để làm cho kịch bản Monkey Talk của tôi hoạt động cho các bản dựng cục bộ.Cách lấy ID Android cho một mục menu trong Android?

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

+0

Không ['menuItem.getItemId()'] (http://developer.android.com/reference/android/view/MenuItem.html#getItemId()) phù hợp với bạn? –

+0

@Adil, Có, nó trả về một số nguyên, tôi muốn lấy chuỗi ID "menu_printer_settings" – Harish

Trả lời

0

Giải Quyết bằng cách lấy tất cả các trường cho gói

 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

Hãy thử điều này:

public boolean onOptionsItemSelected(MenuItem item) { 

      switch (item.getItemId()) { 

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

Tôi có thể lấy tên chuỗi "menu_printer_settings" theo lập trình không? – Harish

+0

đơn giản: item.getTitle() – Jarvis

+0

tiêu đề và chuỗi ID khác nhau. Tiêu đề là "printer_settings" nhưng tôi quan tâm đến chuỗi ID "menu_printer_settings" được định nghĩa trong tệp XML. – Harish

11

Solution1:

MenuItem item 

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

sau đó truy cập id [1]

Solution2:

Sử dụng titleCondensed để phù hợp với id ví dụ:

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

sau đó

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

Tôi thích Giải pháp 1 kể từ khi tôi không cần phải lặp lại các tên id.

Hy vọng điều này sẽ hữu ích. Trân trọng Steve

Các vấn đề liên quan