菜单不会显示在"活动"中



我有一个菜单在我的活动中不会显示。我有一个主要活动和一个单独的活动,其中包含我希望用户能够搜索的项目列表。但是,菜单没有显示在活动中进行搜索,因此在搜索字符串中输入时什么都不会发生。

目标是获取搜索活动中的菜单,以便用户使用搜索视图和recyclerview

搜索项目

我是Android Studio的新手,因此对任何帮助都将不胜感激。

这是搜索视图

的菜单
<?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/ic_search"
        android:title="Search"
        app:showAsAction="ifRoom|collapseActionView"
        app:actionViewClass="android.support.v7.widget.SearchView"
        />
    <item android:id="@+id/action_search2"
        android:icon="@drawable/ic_search"
        android:title="Search"
        app:showAsAction="ifRoom|collapseActionView"
        app:actionViewClass="android.support.v7.widget.SearchView"
        />

</menu>

这是布局xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical">

    <include
        layout="@layout/activity_search_toolbar"/>

    <android.support.v7.widget.SearchView
        android:id="@+id/action_search"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:menu="@menu/search_menu">

    </android.support.v7.widget.SearchView>
    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        android:theme="?attr/actionBarTheme">
        <Button
            android:id="@+id/GoBackbutton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="GO BACK" />
        <!--<android.support.v7.widget.SearchView-->
            <!--android:id="@+id/searchBar"-->
            <!--android:layout_width="wrap_content"-->
            <!--android:layout_height="wrap_content">-->
            <!--&lt;!&ndash;app:menu="@menu/search_menu"&ndash;&gt;-->

        <!--</android.support.v7.widget.SearchView>-->
    </android.support.v7.widget.Toolbar>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </android.support.v7.widget.RecyclerView>
</LinearLayout>

和要添加到布局的工具栏

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:id="@+id/search_toolbar"
    android:background="?attr/colorPrimary">
</android.support.v7.widget.Toolbar>

这是我充气search_menu

的地方
    @Override
    public boolean onCreateOptionsMenu(Menu menu){
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.search_menu, menu);
    MenuItem searchItem = menu.findItem(R.id.action_search);
    SearchView searchView = (SearchView) searchItem.getActionView();
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }
        @Override
        public boolean onQueryTextChange(String newText) {
            adapter.getFilter().filter(newText);
            return false;
        }
    });
    return true;
}

最后,这是我的适配器类的一部分,用于过滤recyclerview中的项目

 @Override
public Filter getFilter() {
    return locationFilter;
}
private Filter locationFilter = new Filter(){
    @Override
    protected FilterResults performFiltering(CharSequence constraint){
        List<Location> filteredLocationList = new ArrayList<>();
        if(constraint == null || constraint.length() == 0){
            filteredLocationList.addAll(locationListFull);
        } else{
            String filterPattern = constraint.toString().toLowerCase().trim();
            for(Location location : locationListFull){
                if(location.getTitle().toLowerCase().contains(filterPattern)){
                    filteredLocationList.add(location);
                }
                // Add another if statement here if we want to be able to search
                // descriptions as well
            }
        }
        FilterResults results = new FilterResults();
        results.values = filteredLocationList;
        return results;
    }
    @Override
    protected void publishResults(CharSequence constraint, FilterResults results){
        locationList.clear();
        locationList.addAll((List)results.values);
        notifyDataSetChanged();
    }
};

另外,如果还有其他方法可以将搜索视图与recyclerview一起使用,除了为搜索视图创建菜单外,这将非常有帮助。我尝试研究除了创建新菜单外访问搜索视图的方法,但没有发现任何有用的东西。

准备要显示的屏幕标准选项菜单。每次显示菜单之前,这就是在显示菜单之前称为。您可以使用此方法有效启用/禁用项目或以其他方式动态修改内容。

https://developer.android.com/reference/android/app/activity.html#onprepareoptionsmenu(android.view.menu)

您需要覆盖onPrepareOptionsMenu并在此处设置搜索视图,而不是在onCreateOptionsMenu

中这样做

相关内容

  • 没有找到相关文章

最新更新