与SearchView交互时或者在加载Searchview的活动时出现问题。使用setIconifiedByDefault(true)
时,在与SearchView交互时加载活动后会出现问题,但在使用setIconifiedByDefault(false)
时,问题会在活动加载时出现。
LogCat中输出以下错误:
java.lang.NullPointerException
at android.widget.SearchView.adjustDropDownSizeAndPosition(SearchView.java:1244)
以下是代码:
ExampleActivity.java
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.example, menu);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
SearchManager manager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView search = (SearchView) menu.findItem(R.id.search).getActionView();
search.setSearchableInfo(manager.getSearchableInfo(getComponentName()));
search.setIconifiedByDefault(true);
search.setOnQueryTextListener(new OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
// Perform search
return true;
}
});
}
return true;
}
菜单/的example.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/search"
android:title="Search"
android:showAsAction="ifRoom"
android:actionViewClass="android.widget.SearchView" />
</menu>
XML / searchable.xml
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/search"
android:hint="@string/search" >
</searchable>
searchable.xml 中使用的“搜索”字符串在 values / strings.xml 中定义。 AndroidManifest.xml 中的activity标记中也正确引用了 searchable.xml 文件:
<meta-data
android:name="android.app.default_searchable"
android:value="com.example.MainActivity" />
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
答案 0 :(得分:5)
此问题是由应用于操作栏EditText
中的SearchView
的样式引起的。
您可以通过删除已应用于EditText
的任何样式来解决此问题,例如:
RES /值/ styles.xml
<item name="android:editTextStyle">@style/editor</item>
然后转到布局XML中的每个EditText
视图并直接应用样式:
<EditText style="@style/editor" />