Android 操作栏 SearchView NullPointerException adjustmentDropDownSizeAndPosition

标签 android nullpointerexception android-actionbar searchview

与 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/

相关文章:

java - 无法使用 Intent 调用其他 Activity

Android点击EditText不会显示软键盘

java - 双向链表实现中的 NullPointerException

android - 如何将请求参数附加到当前 Android HttpUrlConnection 调用

java - 在 Java 中进行空检查的最优雅的方法是什么

android - 强制操作栏项目溢出

android - 如何在操作栏中隐藏菜单项?

android - 在 Android 中自定义 ActionBar TabBar?

android - ActionBarSherlock - <Android 3.0 设备上的选项卡文本椭圆大小

javascript - 在数据库服务器中存储 UDID - Android