【问题标题】:androidx.appcompat.widget.SearchView cannot be cast to androidx.core.view.ActionProviderandroidx.appcompat.widget.SearchView 无法转换为 androidx.core.view.ActionProvider
【发布时间】:2021-06-06 01:15:12
【问题描述】:

在菜单膨胀期间遇到 onCreateOptionsMenu 方法错误。 我不明白他为什么提到这个领域 - 似乎我带来了一切并且在androidx下正确地做到了。

public boolean onCreateOptionsMenu(Menu menu) {

        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_main, menu);
        SearchManager searchManager = (SearchManager) getSystemService(SEARCH_SERVICE);
        SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
        MenuItem searchMenuItem = menu.findItem(R.id.action_search);

        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
        searchView.setQueryHint("Поиск последний новостей ...");
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                if (query.length() > 2) {
                    onLoadingSwipeRefresh(query);
                }
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                return false;
            }
        });

        searchMenuItem.getIcon().setVisible(false, false);

        return true;
    }

menu_main.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"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".activities.MainActivity">

    <item
        android:id="@+id/action_search"
        android:orderInCategory="100"
        android:title="Search"
        android:icon="@drawable/ic_search"
        app:showAsAction="always"
        app:actionProviderClass="androidx.appcompat.widget.SearchView"
        android:theme="@android:style/Theme.Holo.Light.DarkActionBar"
        />

    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:title="Settings"
        app:showAsAction="never" />

    <item
        android:id="@+id/action_weather"
        android:orderInCategory="100"
        android:title="Weather"
        android:icon="@drawable/ic_weather"
        app:showAsAction="always" />

</menu>

如何解决这个问题?先感谢您! 附言下面列出了带有错误描述的日志:

Process: com.sv.newsapp, PID: 16248
    java.lang.ClassCastException: androidx.appcompat.widget.SearchView cannot be cast to androidx.core.view.ActionProvider
        at androidx.appcompat.view.SupportMenuInflater$MenuState.readItem(SupportMenuInflater.java:425)
        at androidx.appcompat.view.SupportMenuInflater.parseMenu(SupportMenuInflater.java:179)
        at androidx.appcompat.view.SupportMenuInflater.inflate(SupportMenuInflater.java:129)
        at com.sv.newsapp.activities.MainActivity.onCreateOptionsMenu(MainActivity.java:150)

【问题讨论】:

  • 你是否将AndroidX添加到Gradle?

标签: java android firebase kotlin casting


【解决方案1】:

您需要使用app:actionViewClass,而不是app:actionProviderClass,因为SearchViewCollapsibleActionView,而不是ActionProvider

<item
    android:id="@+id/action_search"
    android:orderInCategory="100"
    android:title="Search"
    android:icon="@drawable/ic_search"
    app:showAsAction="always"
    app:actionViewClass="androidx.appcompat.widget.SearchView"
    android:theme="@android:style/Theme.Holo.Light.DarkActionBar"
    />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2023-02-02
    • 2016-06-30
    • 2016-01-14
    • 2013-07-25
    • 2016-07-05
    • 2017-01-24
    相关资源
    最近更新 更多