2012-06-01 16 views
6

Ich habe vor kurzem mit ActionBarSherlock gearbeitet und verschiedene Tutorials follwing, schrieb ich diesen Code Artikel zum AktionsleisteWie unterscheidet man zwei Menüelementklicks in ActionBarSherlock?

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    menu.add("Refresh") 
     .setIcon(R.drawable.ic_action_refresh) 
     .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 


    menu.add("Search")// Search 
     .setIcon(R.drawable.ic_action_search) 
     .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 
     return true; 
} 

jedoch hinzufügen, ich weiß nicht, wie die beiden Klicks zu unterscheiden.

Obwohl ich herausgefunden habe, dass Sie OnOptionsItemSelected überschreiben müssen, um die Klicks zu behandeln, und auch, dass eine switch-Anweisung verwendet werden kann, um zwischen Klicks zu unterscheiden, aber die meisten Tutorials verwenden Artikel-IDs aus ihren XML-Menüs. Da ich keine Menüs in XML erzeuge, kann ich die Klicks ohne IDs unterscheiden.

+0

enthält Haben Sie einen besonderen Grund haben, das Menü in einer XML-Datei nicht definieren? Es wäre viel einfacher. –

Antwort

17
private static final int REFRESH = 1; 
private static final int SEARCH = 2; 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    menu.add(0, REFRESH, 0, "Refresh") 
     .setIcon(R.drawable.ic_action_refresh) 
     .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 


    menu.add(0, SEARCH, 0, "Search") 
     .setIcon(R.drawable.ic_action_search) 
     .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 
     return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case REFRESH: 
      // Do refresh 
      return true; 
     case SEARCH: 
      // Do search 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 
+0

: Danke, für mich das gleiche Problem und jetzt funktioniert setIcon() nicht. Können Sie mir helfen? – sherin

0

Sie können ti tun, indem es Id in onOptionsItemSelected ................, die hier eingestellt werden kann auch

http://thedevelopersinfo.wordpress.com/2009/10/29/handling-options-menu-item-selections-in-android/

http://developer.android.com/reference/android/view/Menu.html#add(int, int, int, java.lang.CharSequence)

use 
public abstract MenuItem add (int groupId, int itemId, int order, CharSequence title) 

Since: API Level 1 
Add a new item to the menu. This item displays the given title for its label. 
Parameters 

groupId The group identifier that this item should be part of. This can be used to define groups of items for batch state changes. Normally use NONE if an item should not be in a group. 
itemId Unique item ID. Use NONE if you do not need a unique ID. 
order The order for the item. Use NONE if you do not care about the order. See getOrder(). 
title The text to display for the item. 
Returns 

The newly added menu item. 
+0

yeah, aber was ID, ich habe ihnen keine Ids gesetzt, und wenn ich die Menüpunkte hinzufügen, gibt es keine Methode wie .setid (string) –

+0

oh danke, Ill versuchen, dass, sobald ich die Hände auf meinem Computer , ignoriere dann den letzten Kommentar. –

1

überprüfen Sie einfach folgende

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

, die

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { <--- here you can get it 
     case android.R.id.home: 
      // app icon in action bar clicked; go home 
      Intent intent = new Intent(this, HomeActivity.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      startActivity(intent); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 
Verwandte Themen