Android Action Bar SearchView NullPointerException adjustDropDownSizeAndPosition

时间:2014-03-10 08:20:46

标签: android nullpointerexception android-actionbar searchview

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

1 个答案:

答案 0 :(得分:5)

此问题是由应用于操作栏EditText中的SearchView的样式引起的。

您可以通过删除已应用于EditText的任何样式来解决此问题,例如:

RES /值/ styles.xml

<item name="android:editTextStyle">@style/editor</item>

然后转到布局XML中的每个EditText视图并直接应用样式:

<EditText style="@style/editor" />