2012-10-03 30 views
3

我想在我的操作欄中創建一個始終展開的搜索窗口。我正在使用ActionBar Sherlock庫。根據我發現的一些樣本,這個代碼應該可以做到這一點在ActionBar中訪問actionView

public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = this.getSupportMenuInflater(); 
    inflater.inflate(R.menu.action_bar, menu); 

    MenuItem searchItem = menu.findItem(R.id.action_bar_search); 
    SearchView searchView = (SearchView) searchItem.getActionView(); //returns null 
    searchView.setIconifiedByDefault(false); 


    return true; 
} 

然而,getActionView();返回null。 有沒有其他的方式去searchView,以便我可以調用setIconifiedByDefault(false);方法 ? 我想保持搜索查看的定義XML文件如下

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item android:id="@+id/action_bar_search" 
      android:title="@string/action_bar_search" 
      android:icon="@drawable/ic_magnify" 
      android:showAsAction="always" 
      android:actionViewClass="android.widget.SearchView" /> 
    </menu> 

感謝所有幫助

回答

12

您的問題可能與您的XML有關。更改android:actionViewClass="android.widget.SearchView"android:actionViewClass="com.actionbarsherlock.widget.SearchView"

+0

我還沒有嘗試過,但它聽起來很合乎邏輯。非常感謝您發現它。 –

0

你確定你使用正確的R.menu...鏈接?也嘗試使用getMenuInflater();而不是getSupportMenuInflater();

+0

菜單在res/menu的文件action_bar.xml中定義,並且findItem()方法返回正確的(我認爲)對象。 –

+0

我使用getSupportMenuInflater();調用ActionBarSherlock庫的menuInflater,但它的行爲應與股票版本完全相同。 –