1

I'm trying to implement searchview on my fragment toolbar. For me other menu item is working properly but using searchview id is not either clicked or listeners invoked to perform searching. I'm showing few lines below.

crop_searchview_menu :

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/crop_search_menu"
        android:icon="@drawable/ic_search_icon"
        android:title="@string/search_crop_title"
        app:actionViewClass="androidx.appcompat.widget.SearchView"
        app:showAsAction="always" />

    <item
        android:id="@+id/searchview_addcrop_menu"
        android:title="@string/add_crop_btn"
        app:showAsAction="ifRoom"
        />
</menu>

Here in above code the second id="searchview_addcrop_menu" is working properly on performing onitemclick. I have added this menu on my MaterialToolbar which is under AppBarLayout as below.

cropMainToolbar :

<com.google.android.material.appbar.MaterialToolbar
            app:menu="@menu/crop_searchview_menu"
            app:layout_scrollFlags="scroll|enterAlwaysCollapsed"
            android:id="@+id/cropMainToolbar"
            app:title="@string/crops_home_heading"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

I have applied onMenuItemClickListener on my toolbar because onCreateOptionsMenu() is not working for me inside fragment by any methods shown here which shows problem as my inflated menu is never shown on my toolbar.

I skipped that and tried to below in java code.

OnMenuItemClickListener code:

cropMainToolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                if(item.getItemId()== R.id.crop_search_menu){ //not working
                
                    SearchView searchView= (SearchView) cropsMenu.findItem(R.id.crop_search_menu).getActionView();
                    searchView.setQueryHint(getResources().getString(R.string.search_crop_hint));
                    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                        @Override
                        public boolean onQueryTextSubmit(String query) {
                            return false;
                        }

                        @Override
                        public boolean onQueryTextChange(String newText) {
                            System.out.println("Typed "+newText);   //not working
                            return false;
                        }
                    });


                }if(item.getItemId()==R.id.searchview_addcrop_menu){ //works
                    Intent intent = new Intent(context, AddChangeCropActivity.class);
                    cropChangesLaucher.launch(intent);
                }
                return true;
            }
        });

Please help me to perform searchview execution. I'm using Android Studio 2021.1.1 gradle 7.0

Nikita K
  • 75
  • 2
  • 11

1 Answers1

1

You need to do the initialize SearchView in the onCreateOptionsMenu() function. Your initialization should go like this

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    SearchView searchView= (SearchView) cropsMenu.findItem(R.id.crop_search_menu).getActionView();
    searchView.setQueryHint(getResources().getString(R.string.search_crop_hint));
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            System.out.println("Typed "+newText);   //not working
            return false;
        }
    });
    return true;
}
Ravi Mishra
  • 167
  • 1
  • 7