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
,因为SearchView
是CollapsibleActionView
,而不是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 工具栏)