当前位置:  开发笔记 > Android > 正文

在Fragment中添加SearchView

如何解决《在Fragment中添加SearchView》经验,为你挑选了2个好方法。

尝试在操作栏中包含搜索查看.为此,我做了以下事情:

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



   


包含片段中的OnCreateOptionsMenu方法:

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

    }

我已经设置HasOptionsMenu = true;了片段的创建.

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

基于解决类似问题的一些建议,我还尝试了searchview的以下选项.

        var item = menu.FindItem (Resource.Id.action_search);
        var searchItem = MenuItemCompat.GetActionView(item);
        searchView = searchItem.JavaCast();
        searchView.SetSearchableInfo(searchManager.GetSearchableInfo(Activity.ComponentName));

但同样,我将searchView视为null.

现在我已经尝试了可能的选项,我对于为什么searchview变为null无能为力.

任何帮助深表感谢.



1> Pavan Bilagi..:

将MenuSearch.xml更改为



    

并在你的片段中添加 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);
        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) {

                                          }
                                      }
        );
    }



2> 小智..:

答案已于2018年更新。如果您使用Java,对Kotlin表示抱歉。

您的xml菜单资源(例如search_menu.xml):



    

构建代码:

override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater?) {
    super.onCreateOptionsMenu(menu, inflater)
    menu.clear()
    inflater?.inflate(R.menu.search_menu, menu)
    val searchView = SearchView((context as MainActivity).supportActionBar?.themedContext ?: context)
    menu.findItem(R.id.action_search).apply {
        setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW or MenuItem.SHOW_AS_ACTION_IF_ROOM)
        actionView = searchView
    }

    searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
        override fun onQueryTextSubmit(query: String): Boolean {
            return false
        }

        override fun onQueryTextChange(newText: String): Boolean {
            return false
        }
    })
    searchView.setOnClickListener {view ->  }
}

您可能还需要将这一行放进去onCreate()(为我的片段工作),以使所有内容都显示出来:

setHasOptionsMenu(true)

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有