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

时间:2013-08-22 17:06:48

标签: java android android-logcat

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

3 个答案:

答案 0 :(得分: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;
    }
});

答案 1 :(得分:5)

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

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

有关如何使用资源添加支持库,请参阅官方Google doco的Adding Libraries with Resources部分中的完整步骤。

摘录以上引用的doco,以防将来链接发生变化:

  1. 确保您已使用以下网址下载了Android支持库 SDK Manager。
  2. 创建一个库项目并确保所需的JAR 文件包含在项目的构建路径中:
    • 选择文件>进口。
    • 选择现有Android代码进入工作区,然后单击下一步。
    • 浏览到SDK安装目录,然后浏览到支持 库文件夹。例如,如果要添加appcompat 项目,浏览到/ extras / android / support / v7 / appcompat /。
    • 单击“完成”以导入项目。对于v7 appcompat项目,您 现在应该看到一个名为android-support-v7-appcompat的新项目。
    • 在新库项目中,展开libs /文件夹,右键单击每个 .jar文件并选择Build Path>添加到构建路径。例如, 在创建v7 appcompat项目时,添加两者 android-support-v4.jar和android-support-v7-appcompat.jar文件到 构建路径。
    • 右键单击项目,然后选择Build Path>配置构建路径。在“订购和导出”选项卡中,检查刚刚添加到构建路径的.jar文件,以便它们可供依赖于此库项目的项目使用。例如,appcompat项目要求您导出android-support-v4.jar和android-support-v7-appcompat.jar文件。
    • 取消选中Android依赖关系。
    • 单击“确定”完成更改。

答案 2 :(得分:0)

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

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