简体   繁体   English

Android 工具栏菜单 SearchView id 在 Fragment 中不匹配

[英]Android Toolbar menu SearchView id is not matching inside Fragment

I'm trying to implement searchview on my fragment toolbar.我正在尝试在我的片段工具栏上实现 searchview。 For me other menu item is working properly but using searchview id is not either clicked or listeners invoked to perform searching.对我来说,其他菜单项工作正常,但使用 searchview id 既未被单击,也未调用侦听器来执行搜索。 I'm showing few lines below.我在下面显示几行。

crop_searchview_menu: 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.在上面的代码中,第二个 id="searchview_addcrop_menu" 在执行 onitemclick 时正常工作。 I have added this menu on my MaterialToolbar which is under AppBarLayout as below.我在 AppBarLayout 下的 MaterialToolbar 上添加了这个菜单,如下所示。

cropMainToolbar: 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.我已经在我的工具栏上应用了 onMenuItemClickListener,因为 onCreateOptionsMenu() 无法通过此处显示的任何方法在片段内部为我工作,这显示了问题,因为我的膨胀菜单从未显示在我的工具栏上。

I skipped that and tried to below in java code.我跳过了它并尝试在下面的 java 代码中。

OnMenuItemClickListener code: OnMenuItemClickListener 代码:

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我正在使用 Android Studio 2021.1.1 gradle 7.0

You need to do the initialize SearchView in the onCreateOptionsMenu() function.您需要在 onCreateOptionsMenu() 函数中初始化 SearchView。 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;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM