找不到类 'android.support.v7.widget.SearchView$5'

Posted

技术标签:

【中文标题】找不到类 \'android.support.v7.widget.SearchView$5\'【英文标题】:Could not find class 'android.support.v7.widget.SearchView$5'找不到类 'android.support.v7.widget.SearchView$5' 【发布时间】:2013-08-22 17:06:48 【问题描述】:

我在 y Logcat 中收到此错误。 有人知道是什么吗?

    08-22 19:02:57.830: E/dalvikvm(660): Could not find class 'android.support.v7.widget.SearchView$5', referenced from method android.support.v7.widget.SearchView.addOnLayoutChangeListenerToDropDownAnchorSDK11

【问题讨论】:

找不到那个类。你的libs 文件夹中有那个库吗? 是否添加了支持库 v7? 是的,我在库中有 SearchView 类,我已经导入了 android-support-v7-appcompat 库来添加 actionbare pre API 11 是的,但我不明白为什么会出现这个错误 我添加了 android-support-v7-appcompat 库 【参考方案1】:

这里没有太多代码可以使用,但我自己也遇到了这种情况,这就是发生在我身上的事情:

我使用 v7 兼容库以便在 Android 2 上拥有一个 ActionBar 我正在实现搜索界面的东西。

基本设置代码(onCreateOptionsMenu()

SearchManager searchManager =
        (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
SupportMenuItem searchMenuItem = ((SupportMenuItem) menu.findItem(R.id.menu_search));
SearchView searchView = (SearchView) searchMenuItem.getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(activity.getComponentName()));

错误代码

searchMenuItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() 
    @Override
    public boolean onMenuItemActionExpand(MenuItem item) 
        // on search expand stuff
        return true;
    

    @Override
    public boolean onMenuItemActionCollapse(MenuItem item) 
        // on search collapse stuff
        return true;
    
);

不幸的是,这里的问题是我们正在调用一个仅在 v14 中受支持的方法,因此当它尝试加载一些隐式使用的类时,我们会得到一个“奇怪的”运行时错误。这不是一个很好的解释,但基本上这与我们需要使用getSupportActionBar() 而不是getActionBar() 的原因相同。

好代码

searchMenuItem.setSupportOnActionExpandListener(new MenuItemCompat.OnActionExpandListener() 
    @Override
    public boolean onMenuItemActionExpand(MenuItem item) 
        // do work
        return true;
    

    @Override
    public boolean onMenuItemActionCollapse(MenuItem item) 
        // do work
        return true;
    
);

【讨论】:

关于我应该提到的事情,我使用的是 Android Studio(和 IntelliJ),它给了我编译错误......但它可以工作并运行并且很好......我已经提交了AndroidStudio 的错误:code.google.com/p/android/issues/…【参考方案2】:

您需要确保在 Eclipse 中正确添加 Android 支持库,以从日志中删除以下错误“找不到从方法 android.support.v7.widget 引用的类 android.support.v7.widget.SearchView$5。 SearchView.addOnLayoutChangeListenerToDropDownAnchorSDK11'。

要记住的关键点,不要忘记在添加支持库时取消选中 Android 依赖项,因为 v7 appcompat 库有资源。对支持库项目中的依赖项进行更改后,清理支持库项目即可。

关于如何使用资源添加支持库,请参阅 Google 官方文档的 Adding Libraries with Resources 部分中的完整过程。

如果将来链接更改,请从上面引用的文档中摘录:

    确保您已使用 SDK 管理器。 创建库项目并确保所需的JAR 文件包含在项目的构建路径中: 选择文件 > 导入。 选择 Existing Android Code Into Workspace 并单击 Next。 浏览到 SDK 安装目录,然后到 Support 库文件夹。例如,如果您要添加 appcompat 项目,浏览到 /extras/android/support/v7/appcompat/。 单击完成以导入项目。对于 v7 appcompat 项目,您 现在应该会看到一个名为 android-support-v7-appcompat 的新项目。 在新建的库项目中,展开 libs/ 文件夹,右键单击每个 .jar 文件并选择构建路径 > 添加到构建路径。例如, 创建 v7 appcompat 项目时,添加 android-support-v4.jar 和 android-support-v7-appcompat.jar 文件到 构建路径。 右键单击项目并选择构建路径 > 配置构建路径。在 Order and Export 选项卡中,检查您刚刚添加到构建路径的 .jar 文件,以便它们可用于依赖此库项目的项目。例如,appcompat 项目要求您同时导出 android-support-v4.jar 和 android-support-v7-appcompat.jar 文件。 取消选中 Android 依赖项。 单击“确定”完成更改。

【讨论】:

【参考方案3】:

您需要将缺少的支持库添加到项目中。 在 Eclipse 中:右键单击项目

选择 Android 工具/添加支持库...

【讨论】:

以上是关于找不到类 'android.support.v7.widget.SearchView$5'的主要内容,如果未能解决你的问题,请参考以下文章

IllegalStateException:在父或祖先上下文类 android.support.v7.widget.AppCompatButton 中找不到方法 insert(View)

膨胀类 android.support.v7.widget.RecyclerView 时出错

proguard 不保留匿名类

没有找到类“android.support.v7.widget.RecyclerView

膨胀类 android.support.v7.widget.RecyclerView(Eclipse) 时出错

膨胀类 android.support.v7.app.MediaRouteButton 时出错