3

I know this already has been asked many times but I've read all of them and tried changing lot's of thing and none of them has worked.
I'm writing an app which supports only android 4 and more so I don't need support library v7 (formerly it was included though). My code is very straight forward:

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);
}

I'm getting NullPointerException on 4th line. Here is a link to my repo so you can see anything you want. I think myself, that problems lies in MainActivity class or menu.xml or in application Manifest.

Please help, I'm stucked.

9
  • with only that to go on, we won't be able to do much, I guess. why not checking for searchView == null before calling a method on it?
    – Stultuske
    Commented May 15, 2014 at 8:57
  • I've put a link to entire my app! And as I said searchView is null in 6th line. Commented May 15, 2014 at 9:06
  • if it is null, don't call a method on it.
    – Stultuske
    Commented May 15, 2014 at 9:12
  • You say you don't need the support library, then why are you using it? You're using android.support.v7.widget.SearchView in your xml and MenuItemCompat in your code so you're clearly using the support library.
    – darnmason
    Commented May 15, 2014 at 9:53
  • @darnmason: I've corrected that, still gets the same error Commented May 15, 2014 at 9:56

2 Answers 2

1
+50

You have a small typo in your main.xml menu file resource. You wrote android.widget.searchview, this should be android.widget.SearchView(case matters as there isn't any searchview widget in the android SDK explaining the missing(null) widget).

1

The problem with the code is SearchView is not a MenuItem so cannot be obtained by menu.findItem. You have to get the menu item for search first and then get your SearchView.

Replace the failing line with -

mSearchMenuItem = menu.findItem(R.id.action_search);
mSearchView = (EnglishVerbSearchView) MenuItemCompat.
               getActionView(mSearchMenuItem);

WHERE,

R.id.action_search is the id of your search item in the menu.

Also since you are using the compat library so your menu xml file should contain the yourapp namespace.

For example --

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

NOTE:

Application can be anything, in the above example as it is yourapp. It has to point to http://schemas.android.com/apk/res-auto schema though.

The typical example with account to your problem is shown at:

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

The code is included above for clarity of the problem.

UPDATE:

To clear your mistakes in the xml look at the following code of your 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"/>

Just replace the above code with the following ---

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

Please note the changes in line 2, 7 and 8.

SOURCE: Action View Bar.

Hope this will help you!

2
  • As I've said in the question and it's comment, I'm not gonna use v7 support library and removed it from project. Commented May 19, 2014 at 8:43
  • I did as your said but still get that damn exception. Commented May 21, 2014 at 7:54

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.