【问题标题】:Android DialogFragment - implement SearchView widget from toolbar inflated menuAndroid DialogFragment - 从工具栏膨胀菜单实现 SearchView 小部件
【发布时间】:2017-07-27 08:48:38
【问题描述】:

正如问题的标题所说,我正在尝试实现放置在DialogFragment 工具栏中的SearchView 小部件。使用工具栏的inflateMenu 方法扩展菜单。

注意:对话框片段本身是在另一个片段中调用的,而不是一个活动

下面是我如何调用 dialogFragment:

SearchFragment searchDialog = new SearchFragment();
searchDialog.setStyle(DialogFragment.STYLE_NORMAL, R.style.FullscreenDialogFragment);
searchDialog.show(getChildFragmentManager(), "search");

这是我的menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.hubsante.Fragment.SearchFragment">

    <item
        android:id="@+id/action_search"
        android:title="Rechercher"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="ifRoom" />

</menu>    

以及菜单的执行

toolbar.inflateMenu(R.menu.menu_objective_details);
toolbar.setOnMenuItemClickListener(this);    

@Override
    public boolean onMenuItemClick(MenuItem item) {

        if (item.getItemId() == R.id.action_search){
            SearchManager manager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);

            SearchView search = (SearchView) item.getActionView();
            search.setSearchableInfo(manager.getSearchableInfo(getActivity().getComponentName()));
            search.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

                @Override
                public boolean onQueryTextSubmit(String query) {
                    Toast.makeText(getContext(), query, Toast.LENGTH_SHORT).show();
                    return true;
                }

                @Override
                public boolean onQueryTextChange(String query) {
                    return true;

                }

            });
        }
        return true;
    }    

提交查询时不显示 toast!即使我尝试更新对话框片段中的 TextView,它也不会更新。

【问题讨论】:

    标签: android android-fragments android-toolbar searchview


    【解决方案1】:
     @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.mymenu, menu);
            final SearchView searchView= (SearchView) menu.findItem(R.id.action_search).getActionView();               searchView.setQueryHint(getResources().getString(R.string.search_view_helper));
            searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                @Override
                public boolean onQueryTextSubmit(String query) {
                        searchView.clearFocus();
                    // Your toast message
                    return true;
                }
    
                @Override
                public boolean onQueryTextChange(String input) {
                    return  false;
                }
    
            });
            return true;
        }
    

    您可以在 onCreateOptionsMenu() 中引入 searchview 并在其中设置侦听器,而不是尝试使用方法 onMenuItemClick。这是在宿主活动类中完成的,但您可以在片段中覆盖它

    【讨论】:

    • getActivity().getApplicationContext 不工作。实际上,onQueryTextSubmitted 方法从未被调用过
    • 我正在根据我编写的有效代码更新我的答案。您应该根据您的项目更改值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多