8

我在 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
4

3 回答 3

11

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

我正在使用 v7 compat 库以便在 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;
    }
});
于 2013-09-03T19:36:54.207 回答
5

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

关键要记住,添加支持库时不要忘记取消选中 Android 依赖项,因为 v7 appcompat 库有资源。在您的支持库项目中更改您的依赖项后,清理支持库项目就是这样。

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

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

  1. 确保您已使用 SDK 管理器下载了 Android 支持库。
  2. 创建一个库项目并确保所需的 JAR 文件包含在项目的构建路径中:
    • 选择文件 > 导入。
    • 选择 Existing Android Code Into Workspace 并单击 Next。
    • 浏览至 SDK 安装目录,然后浏览至 Support Library 文件夹。例如,如果您要添加 appcompat 项目,请浏览到 /extras/android/support/v7/appcompat/。
    • 单击完成以导入项目。对于 v7 appcompat 项目,您现在应该会看到一个名为 android-support-v7-appcompat 的新项目。
    • 在新的库项目中,展开 libs/ 文件夹,右键单击每个 .jar 文件并选择 Build Path > Add to Build Path。例如,在创建 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 依赖项。
    • 单击确定以完成更改。
于 2013-09-05T08:05:35.123 回答
0

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

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

于 2013-12-19T08:42:21.290 回答