与搜索视图交互或使用搜索视图加载的活动时,问题发生。当使用setIconifiedByDefault(true)
时,问题是在与搜索视图交互时加载活动后发生的,但是当使用setIconifiedByDefault(false)
时,当活动加载时,问题发生。
以下错误是在logcat中输出的:
java.lang.NullPointerException
at android.widget.SearchView.adjustDropDownSizeAndPosition(SearchView.java:1244)
这是代码:
expepeActivity.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 中定义。另外, searchable.xml 文件在 androidmanifest.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" />
此问题是由在Action Bar SearchView
中应用于EditText
引起的。
您可以通过删除应用于EditText
的任何样式来解决此问题,例如:
res/values/styles.xml
<item name="android:editTextStyle">@style/editor</item>
然后转到布局XML中的每个EditText
视图,然后直接应用样式:
<EditText style="@style/editor" />