SearchView getActionView返回null

这在几天前工作,但突然停了下来。 我只想在某些片段可见时使用操作栏search小部件。

现在我无法获得SearchView ,现在getActionView总是返回null。

searchable.xml

 <?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/app_name" android:hint="@string/search_for_places"> </searchable> 

的Manifest.xml

 <activity android:name=".ui.activities.MainActivity" android:launchMode="singleTop"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> <action android:name="android.intent.action.SEARCH"/> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/> <meta-data android:name="android.app.default_searchable" android:value=".ui.activities.MainActivity" /> </activity> 

menu.xml文件

 <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:myapp="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_search_place" android:icon="@drawable/ic_2_action_search" android:orderInCategory="1" android:title="@string/title_search" myapp:showAsAction="collapseActionView|ifRoom" myapp:actionViewClass="android.support.v7.widget.SearchView"/> </menu> 

片段

 ... setHasOptionsMenu(true); ... @Override public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) { inflater.inflate(R.menu.menu, menu); MenuItem searchItem = menu.findItem(R.id.action_search_place); mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem); SearchManager searchManager = (SearchManager) getBaseActivity().getSystemService(Context.SEARCH_SERVICE); if (mSearchView != null) { mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName())); mSearchView.setIconifiedByDefault(true); mSearchView.setOnQueryTextListener(this); } super.onCreateOptionsMenu(menu, inflater); } 

今天我有同样的问题,我想我解决了它。 事实certificate,我做了一些不完全按照ActionBarCompat合同的事情:

  • 每个使用ActionBarCompat活动都应该直接扩展ActionBarActivity而不是FragmentActivity
  • 每个使用ActionBarCompat活动都应该将其主题声明为从ActionBarCompat主题inheritance。

这两个我看到从谷歌解释video 。

现在我的searchView不是null了。

我有同样的问题,因为在我的菜单中我使用: android:actionViewClass="android.widget.SearchView"根据谷歌文档。

那么事实certificate,如果我使用AppCompatActivity,我应该使用app:actionViewClass="android.widget.SearchView"来代替。

希望这有助于某人。

如果您使用的是proguard,则可以这样做: https : //code.google.com/p/android/issues/detail? id = 58508

简而言之,将下面一行添加到您的proguardconfiguration文件proguard-rules.pro

 -keep class android.support.v7.widget.SearchView { *; } 

我修正了它:在菜单xml中,我使用了应用程序名称空间:

  app:showAsAction="collapseActionView|always" app:actionViewClass="android.support.v7.widget.SearchView" 

Android的教程https://developer.android.com/training/search/setup.html使用android:showAs和android:actionView

我也有同样的错误。 我做了以下的事情:

我有一个由FragmentActivity扩展的活动:

 @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.feed, menu); // Associate searchable configuration with the SearchView SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView) menu.findItem(R.id.action_search) .getActionView(); searchView.setSearchableInfo(searchManager .getSearchableInfo(getComponentName())); return true; } 

Searchable.xml:

 <?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/app_label" android:hint="@string/search_hint" > </searchable> 

menu.xml文件:

 <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" tools:context="br.com.srtorcedor.FeedActivity"> <item android:id="@+id/action_search" android:icon="@drawable/abc_ic_search" android:title="@string/search_title" android:showAsAction="always" android:actionViewClass="android.widget.SearchView"/> </menu> 

AndroidManifest:

  <activity android:name=".FeedActivity" android:icon="@drawable/ic_action_pins" android:label="@string/title_activity_feed"> <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" /> </activity> 

你能检查一下它是否适用于你?

今天我发现我得到的getActionView()调用的项目没有:

 android:showAsAction="always" 

看来,否则他们只是不正确膨胀。