与 SearchView 交互或加载具有 Searchview 的 Activity 时会出现此问题。使用时setIconifiedByDefault(true)
当与 SearchView 交互时, Activity 加载后,但使用 setIconifiedByDefault(false)
时,会出现问题加载 Activity 时会出现问题。
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;
}
menu/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 的 Activity 标记中正确引用:
<meta-data
android:name="android.app.default_searchable"
android:value="com.example.MainActivity" />
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
最佳答案
此问题是由应用于操作栏 SearchView
中的 EditText
的样式引起的。
您可以通过删除应用于 EditText
的任何样式来解决此问题,例如:
res/values/styles.xml
<item name="android:editTextStyle">@style/editor</item>
然后转到布局 XML 中的每个 EditText
View 并直接应用样式:
<EditText style="@style/editor" />
关于Android 操作栏 SearchView NullPointerException adjustmentDropDownSizeAndPosition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22295138/