获取null SearchView

时间:2014-05-15 08:51:30

标签: android searchview

我知道这已经被多次询问了,但是我已经阅读了所有这些内容并尝试改变了很多东西而且没有一个有效。
我正在编写一个仅支持android 4及更多内容的应用程序,因此我不需要支持库v7(以前它包括在内)。我的代码很直接:

public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();

    searchView.setOnQueryTextListener(new SearchViewQueryTextListener());
    return super.onCreateOptionsMenu(menu);
}

我在第4行得到NullPointerException。 Here是我的回购链接的链接,因此您可以看到您想要的任何内容。我认为自己,问题出在MainActivity类或menu.xml或应用程序清单中。

请帮助,我被困了。

2 个答案:

答案 0 :(得分:1)

代码问题SearchView不是MenuItem,因此menu.findItem无法获取。您必须首先获取搜索菜单项,然后获取SearchView

用 -

替换失败的行
mSearchMenuItem = menu.findItem(R.id.action_search);
mSearchView = (EnglishVerbSearchView) MenuItemCompat.
               getActionView(mSearchMenuItem);

WHERE,

R.id.action_search是菜单中搜索项的ID。

此外,由于您使用的是compat库,因此菜单xml文件应包含yourapp命名空间。

例如 -

<menu xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:yourapp="http://schemas.android.com/apk/res-auto" >
    <item android:id="@+id/action_search"
      android:title="@string/action_search"
      android:icon="@drawable/action_search"
      yourapp:showAsAction="always|collapseActionView"
      yourapp:actionViewClass="android.support.v7.widget.SearchView" />
</menu>

注:

应用程序可以是任何内容,在上面的示例中为yourapp。它必须指向http://schemas.android.com/apk/res-auto架构。

与您的问题有关的典型示例如下所示:

Android-nullpointerexception-on-searchview-in-action-bar

为了清楚起见,上面包含了代码。

<强>更新

要清除xml中的错误,请查看以下xml代码 -

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<!--     xmlns:yourapp="http://schemas.android.com/apk/res-auto" -->

    <!-- Search / will display always -->
    <item android:id="@+id/action_search"
        android:title="@string/action_search"
        android:icon="@drawable/ic_action_search"
        android:showAsAction="ifRoom|collapseActionView"
        android:actionViewClass="android.widget.searchview"/>

只需用以下内容替换上面的代码---

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:yourapp="http://schemas.android.com/apk/res-auto">
        <!-- Search / will display always -->
        <item android:id="@+id/action_search"
            android:title="@string/action_search"
            android:icon="@drawable/ic_action_search"
            yourapp:showAsAction="ifRoom|collapseActionView"
            yourapp:actionViewClass="android.widget.searchview"/>

请注意第2,7和8行的变化。

消息来源: Action View Bar.

希望这会对你有帮助!

答案 1 :(得分:1)

您的main.xml菜单文件资源中有一个小错字。你写了android.widget.searchview,这应该是android.widget.SearchView(案件很重要,因为android SDK中没有任何searchview小部件解释丢失(null)小部件。