菜单不会显示在“活动”中

问题描述 投票:0回答:1

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

目标是获取搜索活动中的菜单,以允许用户使用SearchView和RecyclerView搜索项目

我是Android Studio的新手,所以任何帮助都会非常感激。

这是SearchView的菜单

<?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;
}

最后,这是我的Adapter类的一部分,用于过滤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();
    }
};

此外,除了为SearchView创建菜单之外,还有另一种方法可以将SearchView与RecyclerView一起使用,这将非常有用。我已经尝试过研究如何通过创建新菜单来访问SearchView,但是没有找到任何有用的东西。

java android android-recyclerview searchview
1个回答
0
投票

准备要显示的屏幕标准选项菜单。每次显示菜单时都会调用此菜单。您可以使用此方法有效地启用/禁用项目或以其他方式动态修改内容。

https://developer.android.com/reference/android/app/Activity.html#onPrepareOptionsMenu(android.view.Menu)

您需要覆盖onPrepareOptionsMenu并在那里设置您的searchview,而不是在onCreateOptionsMenu中执行此操作

© www.soinside.com 2019 - 2024. All rights reserved.