2012-05-02 50 views
1

我試圖從ActionBarSherlock請求搜索。請求搜索的ActionBarSherlock

我的課程擴展了SherlockListActivity。

這是怎麼了我真的添加菜單按鈕的動作條:

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     menu.add("Save") 
      .setIcon(R.drawable.ic_action_search) 
      .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | 
       MenuItem.SHOW_AS_ACTION_WITH_TEXT); 
     return true; 
    } 

的問題是,我無法用ID來調用它:

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch(item.getItemId()) { 
      case ?????: { 
       onSearchRequested(); 
       return true; 
      } 
     } 
     return true; 
    } 

如何,人們通常解決這個問題?

謝謝。

回答

4

如果您從XML菜單文件充氣菜單,您將設置一個ID,然後可以在您的onOptionsItemSelected方法中使用該ID。就像這樣:

XML

<menu xmlns:android="http://schemas.android.com/apk/res/android">  
    <item android:id="@+id/menu_search" 
    android:icon="@drawable/ic_menu_search" 
    android:showAsAction="ifRoom" 
    android:actionViewClass="android.widget.SearchView" android:title="@string/search"/> 
</menu> 

片段

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 

     case R.id.menu_search: 
      onSearchRequested(); 

      return true; 

     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 
+0

情況下R.id.menu_search: - 這不能被compiller發現,如果我這樣做... – Stas

0

您也可以使用

@Override 
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) { 

    menu.add(0, 1, 1, "Refresh").setIcon(R.drawable.ic_refresh).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); 
    menu.add(0, 2, 2, "Search").setIcon(R.drawable.ic_search).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); 

    return super.onCreateOptionsMenu(menu); 
} 


@Override 
    public boolean onOptionsItemSelected(com.actionbarsherlock.view.MenuItem item) { 
     switch (item.getItemId()){ 
      case 1: 
       ... 
       break; 
      case 2: 
       ... 
       break; 
     } 
     return true; 
    }