Search code examples
javaandroidandroid-studioandroid-actionbarsearchview

Android Actionbar SearchView with item.getItemId() not working


i'm developing an application with API 8. now i'm trying to add 3 items in my menu, one of item i added is SearchView, i used app:actionViewClass="android.support.v7.widget.SearchView" ofcourse to support the API 8, and in my MainActivity class in onOptionsItemSelected(MenuItem item) i'm trying to handle the click on searchView, but it is no longer working. how can fix this?

menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <!--My SearchView--->
    <item
        android:id="@+id/menu_search"
        android:orderInCategory="100"
        android:title="@string/stringSearch"
        app:actionViewClass="android.support.v7.widget.SearchView"
        android:icon="@drawable/ic_magnify"
        app:showAsAction="always"/>

    <!--My Filter--->
    <item
        android:id="@+id/menu_filter"
        android:orderInCategory="100"
        android:icon="@drawable/ic_filter"
        android:title="@string/StringFilter"
        app:showAsAction="always" />

    <!--Some menu--->
    <item
        android:id="@+id/menu_settings"
        android:orderInCategory="100"
        android:icon="@drawable/ic_dots"
        android:title="@string/Settings"
        app:showAsAction="always" />

</menu>

MainActivity.class

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        ...
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);

        //I setup the searchView here
        MenuItem searchItem = menu.findItem(R.id.menu_search);
        SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
        ....
        return super.onCreateOptionsMenu(menu);
    }

     @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_search:
                //This is click event on searchView but unfortunately not working
                Toast.makeText(getApplicationContext(),"SearcView",Toast.LENGTH_LONG).show();
                break;
            case R.id.menu_settings:
                 Toast.makeText(getApplicationContext(),"Menu Settings",Toast.LENGTH_LONG).show();
                break;
            case R.id.menu_filter:
                Toast.makeText(getApplicationContext(),"Menu Filter",Toast.LENGTH_LONG).show();
                break;
            default:
                break;
        }
        return super.onOptionsItemSelected(item);
    }

}

So, as you can see in my code, i try to fire a toast when the menu item is clicked, everything is working but not my SearchView. this is happen when i started to add app:actionViewClass="android.support.v7.widget.SearchView" on menu in searchView item. anyone can help me? Thank you very much!


Solution

  • You'll want to use one of the listeners on the SearchView class. The OnSearchClickListener looks like it may be the right fit for you.

    Edit. Here's a code example:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);
    
        MenuItem searchItem = menu.findItem(R.id.menu_search);
        SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
    
        searchView.setOnSearchClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // Handle clicks
                }
        });
    
        return super.onCreateOptionsMenu(menu);
    }