【问题标题】:How to add Search View on Action bar on one of the fragments in tab layout dynamically?如何在选项卡布局中的其中一个片段的操作栏上动态添加搜索视图?
【发布时间】:2017-01-04 16:06:03
【问题描述】:

如果您有我正在开发 android 应用程序,请提供一个更好的解决方案,在该应用程序中,使用 TabLaout 和 ViewPager 我在下面添加了 5 个选项卡

  1. 首页
  2. 社交
  3. 通知
  4. 搜索
  5. 链接

我在值/样式中设置了 MainActivity,但我在 search.xml 中放置了自定义操作栏标签。我知道如何在活动的操作栏上添加 SearchView,但我在使用片段时遇到了问题。我的目标只是在用户将在“搜索”选项卡上时在操作栏上显示搜索视图小部件。在我不想显示的其他选项卡上。我还添加了更多 <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/> 在清单文件中的标记和 setHasOptionsMenu(true); 在搜索片段中。但是在没有搜索视图小部件的情况下,操作栏显示在搜索屏幕上,请纠正我做错的地方。

【问题讨论】:

  • 老兄,如果您需要更多帮助,您真的需要在(搜索)片段中分享您的代码,我们无法猜测您的设置、样式/主题或编程逻辑。

标签: android android-actionbar styles searchview android-styles


【解决方案1】:

您只需要在 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();}
    }

menu_search xml:

<?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 请指导我如何在仅搜索片段中显示操作栏我不想在所有其他片段中显示操作栏。我将如何做到这一点?
  • menu_search.xml 仅适用于 SearchFragment,在另一个片段中为您想要的操作栏放置一个不同的菜单,或者只是放置一个空操作栏,例如在 HomeFragment 中放置:setHasOptionsMenu(true); ... ` @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.menu_home, menu); ...` menu_home.xml:&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"&gt; &lt;/menu&gt;
猜你喜欢
  • 2012-08-20
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多