2014-02-26 18 views
11

我無法找到解決辦法,請幫助menu.findItem返回null

的工具:

public class VentasActivity extends ActionBarActivity 
    implements NavigationDrawerFragment.NavigationDrawerCallbacks, android.support.v7.widget.SearchView.OnQueryTextListener 

其中返回null:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    if (!mNavigationDrawerFragment.isDrawerOpen()) { 
     getMenuInflater().inflate(R.menu.sales, menu); 
     restoreActionBar(); 

     // HERE RETURNS NULL 
     searchView = (SearchView) menu.findItem(R.id.action_product_search).getActionView(); 

     if (searchView != null) { 
      final Menu menu_block = menu; 
      searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 

       @Override 
       public boolean onQueryTextSubmit(String query) { 
        // collapse the view ? 
        menu_block.findItem(R.id.action_product_search).collapseActionView(); 
        return false; 
       } 

       @Override 
       public boolean onQueryTextChange(String newText) { 
        // search goes here !! 
        // listAdapter.getFilter().filter(query); 
        return false; 
       } 
      }); 
      Log.i("sales module", "SearchView OK"); 
     } else 
      Log.i("sales module", "SearchView is null"); 


     return true; 
    } 
    return super.onCreateOptionsMenu(menu); 
} 

和sales.xml

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

<item android:id="@+id/action_product_search" 
    android:title="@string/action_search" 
    android:icon="@drawable/ic_action_search" 
    app:showAsAction="always|collapseActionView" 
    android:actionViewClass="android.widget.SearchView" /> 

很多很多謝謝!

更新:restoreActionBar()的代碼

public void restoreActionBar() { 
    ActionBar actionBar = getSupportActionBar(); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 
    actionBar.setDisplayShowTitleEnabled(true); 
    actionBar.setTitle(mTitle); 
} 
+0

你的問題是什麼? –

+0

我無法設置searchView變量與佈局項目,menu.findItem(R.id.action_product_search).getActionView()不起作用 – fabrizotus

+1

@fabrizotus:嘗試作爲'searchView =(SearchView)menu.getItem(0).getActionView );' –

回答

42

終於我發現這個問題:

我改變了最後一行我/res/menu/sales.xml來自:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" > 
<!-- Search Widget --> 
<item android:id="@+id/search_view_productos" 
    android:title="@string/action_search" 
    android:icon="@drawable/ic_action_search" 
    app:showAsAction="always|collapseActionView" 
    android:actionViewClass="android.widget.SearchView" /> 
</menu> 

這樣:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" > 
<!-- Search Widget --> 
<item android:id="@+id/search_view_productos" 
    android:title="@string/action_search" 
    android:icon="@drawable/ic_action_search" 
    app:showAsAction="always|collapseActionView" 
    app:actionViewClass="android.widget.SearchView" /> 
</menu> 

問題是actionViewClass上的xml命名空間

+0

我有同樣的問題,它讓我發瘋,感謝您發佈您的解決方案! – halpsb

+0

是的!這讓它,謝謝 – spacebiker

+0

你是一個天才! – ChaturaM