androidx.appcompat.widget.SearchView 无法转换为 androidx.core.view.ActionProvider

Posted

技术标签:

【中文标题】androidx.appcompat.widget.SearchView 无法转换为 androidx.core.view.ActionProvider【英文标题】:androidx.appcompat.widget.SearchView cannot be cast to 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? 【参考方案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"
    />

【讨论】:

以上是关于androidx.appcompat.widget.SearchView 无法转换为 androidx.core.view.ActionProvider的主要内容,如果未能解决你的问题,请参考以下文章

迁移到AndroidX后:无法实例化类:androidx.appcompat.widget.ShareActionProvider。

android.widget.Toolbar 无法转换为 androidx.appcompat.widget.Toolbar(android 工具栏)

Android studio 3.6 ToolBar问题

Android studio 3.6 ToolBar问题

Toolbar

第三周作业