Android 如何在选项卡布局中的某个片段的操作栏上动态添加搜索视图?

Android 如何在选项卡布局中的某个片段的操作栏上动态添加搜索视图?,android,android-actionbar,styles,searchview,android-styles,Android,Android Actionbar,Styles,Searchview,Android Styles,请为我提供一个更好的解决方案,如果你有我正在使用android应用程序,在家庭活动中使用TabLaout和ViewPager,我在下面添加了5个选项卡 家 社会的 通知 搜寻 链接 我在values/style中设置了MainActivity,但在search.xml中放置了自定义操作栏标记。我知道如何在活动中的操作栏上添加SearchView,但我在使用片段时遇到了问题。我的目标是当用户在“搜索”选项卡上搜索时,在操作栏上显示搜索视图小部件。在我不想显示的其他选项卡上。我还补充了更多 标签和S

请为我提供一个更好的解决方案,如果你有我正在使用android应用程序,在家庭活动中使用TabLaout和ViewPager,我在下面添加了5个选项卡

  • 社会的
  • 通知
  • 搜寻
  • 链接
  • 我在values/style中设置了MainActivity,但在search.xml中放置了自定义操作栏标记。我知道如何在活动中的操作栏上添加SearchView,但我在使用片段时遇到了问题。我的目标是当用户在“搜索”选项卡上搜索时,在操作栏上显示搜索视图小部件。在我不想显示的其他选项卡上。我还补充了更多 标签和SetHasOptions菜单中清单文件中的
    (true);
    在搜索片段中。但操作栏显示在搜索屏幕上,没有搜索视图小部件,请纠正我哪里做错了

    您只需在searchFragment中添加SearchView:

    searchFragment类:

    @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_news, container, false);
    ...        
      setHasOptionsMenu(true);
    ..... 
    return rootView ;}
     @Override
        public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
            super.onCreateOptionsMenu(menu, inflater);
            inflater.inflate(R.menu.menu_search, menu);
            try {
                // Associate searchable configuration with the SearchView
                SearchManager searchManager =
                        (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
                SearchView searchView =
                        (SearchView) menu.findItem(R.id.action_search).getActionView();
                searchView.setSearchableInfo(
                        searchManager.getSearchableInfo(getActivity().getComponentName()));
                searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                    @Override
                    public boolean onQueryTextSubmit(String s) {
                       // do your search
                        return false;
                    }
    
                    @Override
                    public boolean onQueryTextChange(String s) {
               // do your search on change or save the last string or... 
                        return false;
                    }
                });
    
    
            }catch(Exception e){e.printStackTrace();}
        }
    
    <?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:icon="@drawable/action_search_btn"
            android:title="Search"
            app:showAsAction="collapseActionView|ifRoom"
            app:actionViewClass="android.support.v7.widget.SearchView"/>
    </menu>
    
    菜单\u搜索xml:

    @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_news, container, false);
    ...        
      setHasOptionsMenu(true);
    ..... 
    return rootView ;}
     @Override
        public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
            super.onCreateOptionsMenu(menu, inflater);
            inflater.inflate(R.menu.menu_search, menu);
            try {
                // Associate searchable configuration with the SearchView
                SearchManager searchManager =
                        (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
                SearchView searchView =
                        (SearchView) menu.findItem(R.id.action_search).getActionView();
                searchView.setSearchableInfo(
                        searchManager.getSearchableInfo(getActivity().getComponentName()));
                searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                    @Override
                    public boolean onQueryTextSubmit(String s) {
                       // do your search
                        return false;
                    }
    
                    @Override
                    public boolean onQueryTextChange(String s) {
               // do your search on change or save the last string or... 
                        return false;
                    }
                });
    
    
            }catch(Exception e){e.printStackTrace();}
        }
    
    <?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:icon="@drawable/action_search_btn"
            android:title="Search"
            app:showAsAction="collapseActionView|ifRoom"
            app:actionViewClass="android.support.v7.widget.SearchView"/>
    </menu>
    
    
    
    感谢您的回复@Yessine Mahdouani请指导我如何在just Search fragment中显示操作栏我不想在所有其他片段中显示操作栏。我将如何执行此操作?menu_Search.xml仅用于SearchFragment,在其他片段中为操作栏设置不同的菜单,如您所需,或者只设置一个空操作栏,HomeFragment put中的示例:
    SetHasOptions菜单(true)…`@覆盖public void oncreateoptions菜单(菜单菜单,菜单充气机){super.oncreateoptions菜单(菜单,充气机);充气机.inflate(R.Menu.Menu\u home,Menu);…`Menu\u home.xml:
    Dude您真的需要在(搜索)中共享您的代码吗Fragment如果您想在这方面获得更多帮助,我们无法猜测您的设置、样式/主题或编程逻辑。