在 Fragment 中添加 SearchView [英] Adding SearchView in Fragment

查看:27
本文介绍了在 Fragment 中添加 SearchView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试在操作栏中包含搜索视图.为此,我做了以下工作:

Trying to include a searchview in actionbar. For this, I have done the following:

在菜单文件夹中创建MenuSearch.xml,如下所示:

Created MenuSearch.xml in the menu folder as given below:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
   <item
    android:id="@+id/action_search"
    android:actionViewClass="Android.Support.V7.Widget.SearchView"
    android:icon="@android:drawable/ic_menu_search"
    android:showAsAction="always"
    android:title="Search"/>

</menu>

在片段中包含方法 OnCreateOptionsMenu:

Included the method OnCreateOptionsMenu in the fragment:

public override void OnCreateOptionsMenu(IMenu menu, MenuInflater inflater)
    {
        inflater.Inflate(Resource.Menu.MenuSearch, menu);
        base.OnCreateOptionsMenu(menu, inflater);
        var searchManager = (SearchManager) this.Activity.GetSystemService(Context.SearchService);
        searchView = (SearchView) (menu.FindItem(Resource.Id.action_search).ActionView);
        searchView.SetSearchableInfo(searchManager.GetSearchableInfo(Activity.ComponentName));

    }

并且我在片段的 oncreate 中设置了 HasOptionsMenu = true;.

And I have set HasOptionsMenu = true; in oncreate of the fragment.

使用上面的代码,我在 searchView.SetSearchableInfo... 行中得到空指针.不知道为什么会发生这种情况,尽管一切似乎都正确且到位.

With the code above, I get null pointer in the line searchView.SetSearchableInfo... . Not sure why this happens, though everything seem to be correct and in place.

根据解决类似问题的一些建议,我还尝试了以下搜索视图选项.

Based on some suggestions for resolving similar issue, I have also tried out the below option for searchview.

        var item = menu.FindItem (Resource.Id.action_search);
        var searchItem = MenuItemCompat.GetActionView(item);
        searchView = searchItem.JavaCast<Android.Support.V7.Widget.SearchView>();
        searchView.SetSearchableInfo(searchManager.GetSearchableInfo(Activity.ComponentName));

但是,我再次将 searchView 设为 null.

But again, I get searchView as null.

既然我已经尝试了可能的选项,我对为什么 searchview 变为 null 一无所知.

Now that I have tried the possible options, I am clueless as to why searchview becomes null.

非常感谢任何帮助.

推荐答案

将 MenuSearch.xml 更改为

Change your MenuSearch.xml to

    <?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">
        <item android:id="@+id/action_search"
            android:title="@string/app_name"
            android:icon="@drawable/ic_action_search"
            app:showAsAction="collapseActionView|ifRoom"
             />
    </menu>

在你的片段中,添加 searchView.setOnQueryTextListener

    @Override
        public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
            super.onCreateOptionsMenu(menu, inflater);
            menu.clear();
            inflater.inflate(R.menu.search_option_menu, menu);
            MenuItem item = menu.findItem(R.id.action_search);
            SearchView searchView = new SearchView(((MainActivity) mContext).getSupportActionBar().getThemedContext());
           // MenuItemCompat.setShowAsAction(item, //MenuItemCompat.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | //MenuItemCompat.SHOW_AS_ACTION_IF_ROOM);
           //  MenuItemCompat.setActionView(item, searchView);
           // These lines are deprecated in API 26 use instead
 item.setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItem.SHOW_AS_ACTION_IF_ROOM);
        item.setActionView(searchView);
            searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                @Override
                public boolean onQueryTextSubmit(String query) {
                    return false;
                }
                @Override
                public boolean onQueryTextChange(String newText) {
                    return false;
                }
            });
            searchView.setOnClickListener(new View.OnClickListener() {
                                              @Override
                                              public void onClick(View v) {

                                              }
                                          }
            );
        }

这篇关于在 Fragment 中添加 SearchView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆