25

我想在我的项目中使用 CardView,但是当我运行我的应用程序时,我收到以下错误。我正在使用Eclipse.

Error: Error inflating class and android.support.v7.widget.CardView

The graphical view of my xml file says 'The following classes could not be instantiated:
- android.support.v7.widget.CardView (Open Class, Show Error Log)
See the Error Log (Window > Show View) for more details.'

请帮忙。

这是我使用过的片段的布局CardView

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.log.MyContactsFragment" >

<!-- TODO: Update blank fragment layout -->

<android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/cvContactDetails"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:layout_gravity="center"
    android:background="?android:attr/selectableItemBackground"
    android:clickable="false"
    android:elevation="20dp" >

    <TextView
        android:id="@+id/tvContacts"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Contact Info" />

    <Button
        android:id="@+id/bDelete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Delete" />

    <Button
        android:id="@+id/bExport"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Export to phone contacts" />
</android.support.v7.widget.CardView>

这是我活动的布局。

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <FrameLayout
        android:id="@+id/flMainContent"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </FrameLayout>

    <ListView
        android:id="@+id/lvLeftDrawer"
        android:layout_width="200dp"
        android:layout_height="match_parent"
        android:layout_gravity="left"
        android:alpha="255"
        android:background="#0B2161"
        android:divider="@null"
        android:choiceMode="singleChoice" >
    </ListView>

    <ListView
        android:id="@+id/lvRightDrawer"
        android:layout_width="200dp"
        android:layout_height="match_parent"
        android:layout_gravity="right"
        android:alpha="255"
        android:background="#0B2161"
        android:divider="@null"
        android:choiceMode="singleChoice" >
    </ListView>

</android.support.v4.widget.DrawerLayout>

这是我的日志猫

FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.log/com.example.log.HomeScreenActivity}: android.view.InflateException: Binary XML file line #9: Error inflating class android.support.v7.widget.CardView
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
at android.app.ActivityThread.access$600(ActivityThread.java:130)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #9: Error inflating class android.support.v7.widget.CardView
at android.view.LayoutInflater.createView(LayoutInflater.java:613)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
at com.example.log.MyContactsFragment.onCreateView(MyContactsFragment.java:60)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1504)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:942)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1121)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1484)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:571)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1163)
at android.app.Activity.performStart(Activity.java:5018)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2032)
... 11 more
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
at android.view.LayoutInflater.createView(LayoutInflater.java:587)
25 more
Caused by: java.lang.NoClassDefFoundError: android.support.v7.cardview.R$styleable
at android.support.v7.widget.CardView.initialize(CardView.java:203)
at android.support.v7.widget.CardView.<init>(CardView.java:101)
... 28 more

有遇到过同样问题或解决过的,请留言。

4

14 回答 14

56

我想我可以回答我自己的问题。

转到 File -> Import -> Existing Android code into workspace --> Browse (Go to sdk/extras/android/support/v7/cardview) --> 点击 ok --> 点击 Finish

您的项目浏览器现在将 cardview 显示为一个项目。

右键单击cardview项目->属性-> Android(左窗格)->启用isLibrary(勾选复选框)->应用->确定

现在右键单击您的项目->属性-> Android(左窗格)->添加(在库下)-> cardview->应用->确定

现在再次右键单击您的项目->构建路径->配置构建路径->在项目选项卡下,添加cardview

你完成了。

于 2014-10-22T19:25:06.563 回答
40

我猜你的问题不在于你的 xml 布局,而是你的 build.gradle 设置。

当你想在API较低的设备中使用Recyclerview或CardView的支持库时,不仅需要导入v7库,还需要单独导入RecyclerView和CardView的支持。

像这样:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.+'
    compile 'com.android.support:cardview-v7:21.0.+'
    compile 'com.android.support:recyclerview-v7:21.0.+'
    compile 'com.android.support:support-v4:21.0.0'
} 

谷歌的文档在此处指出了这一点:https ://developer.android.com/training/material/compatibility.html

请参阅依赖项部分。

另外,您可以下载google的RecyclerView示例进行挖掘。

希望这会有所帮助!

于 2014-11-24T18:44:56.950 回答
12

在我的情况下,我必须做这两个事情添加android.support.v7.widget.CardView为一个库项目,还要添加+检查它的 jar 文件java build path

  1. 转到 File -> Import -> Existing Android code into workspace --> Browse (Go to sdk/extras/android/support/v7/cardview) --> 点击 ok --> 点击 Finish

  2. 右键单击cardview项目->属性-> Android(左窗格)->启用isLibrary(勾选复选框)->应用->确定

  3. 右键单击您的项目 --> 属性 --> Android(左窗格) --> 添加(在库下) --> cardview --> 应用 --> ok

  4. 再次右键单击您的项目-->构建路径-->配置构建路径-->在库下-->添加jar-->扩展卡视图-->扩展库-->选择android.support.v7.widget.CardView.jar

  5. 在order和export-->check android.support.v7.widget.CardView.jar-->点击ok

于 2014-11-06T11:39:02.923 回答
4

我在这上面浪费了几个小时,对我来说,最后一块拼图是转到已作为 Android 项目导入 Eclipse 的“cardview”项目,然后右键单击 > 属性 > android > 并将其从 Android 2.1 更改为 Lollipop!

于 2014-11-24T17:36:48.047 回答
4

如果您使用的是 intellij,请使用这些步骤,这实际上有效

  • 点击你的项目,
  • 右键单击-> 打开模块设置 (f4)
  • 从 \sdk\extras\android\support\v7\ 导入 cardview
  • 将 .jar 文件添加到 cardview 模块
  • 单击您的项目并将模块依赖项赋予cardview
  • 现在,单击cardview -> android -> 顶部的(+)按钮,您将看到一个复选框(库模块),启用它。
  • 单击确定并关闭您的设置对话框。
  • 重建您的项目并运行它。
于 2015-02-03T12:34:48.157 回答
3

通过添加依赖项我得到了错误

RecyclerView 和 CardView 小部件是 v7 支持库的一部分。要在您的项目中使用这些小部件,请将这些 Gradle 依赖项添加到您应用的模块中:

依赖项 { ... 编译 'com.android.support:cardview-v7:21.0.+' 编译 'com.android.support:recyclerview-v7:21.0.+' }

http://developer.android.com/training/material/lists-cards.html

于 2014-10-30T10:21:48.017 回答
2

这些步骤对我有用:)

转到 File -> Import -> Existing Android code into workspace --> Browse (Go to sdk/extras/android/support/v7/cardview) --> 点击 ok --> 点击 Finish

您的项目浏览器现在将 cardview 显示为一个项目。

右键单击cardview项目->属性-> Android(左窗格)->启用isLibrary(勾选复选框)->应用->确定

现在右键单击您的项目->属性-> Android(左窗格)->添加(在库下)-> cardview->应用->确定

现在再次右键单击您的项目->构建路径->配置构建路径->在项目选项卡下,添加cardview

您还需要一个步骤来消除错误,即 cardview lib 的顺序。

所以再次右键单击您的项目->属性-> Android(左窗格)->在库窗口中选择cardview lib->并向上移动

于 2015-06-18T10:44:04.430 回答
1

@sunil

如前所述:

  1. 转到 File -> Import -> Existing Android code into workspace --> Browse (Go to sdk/extras/android/support/v7/cardview) --> 点击 ok --> 点击 Finish

  2. 右键单击cardview项目->属性-> Android(左窗格)->启用isLibrary(勾选复选框)->应用->确定

  3. 右键单击您的项目 --> 属性 --> Android(左窗格) --> 添加(在库下) --> cardview --> 应用 --> ok

如果这不起作用,请继续从您现在导入的代码库项目的文件夹中添加和删除同一包的单个 jar android-support-v7-cardview/libs。删除 Jar,清理项目并重试。删除一个家伙建议添加的项目,删除任何与 cardview 相关的外部 Jar(我认为这些会导致冲突)。清理项目,希望对你有用。

注意:我个人确实必须将 cardview 库的目标构建级别从4.0.3更改为5.0 ,然后再改回4.1.2,每次都清理项目,以使其正常工作。

于 2014-12-02T07:09:30.453 回答
1

要解决这个问题。首先你必须从

  1. 关闭主项目。
  2. 删除 android-support-v7-appcompat 。
  3. 重新启动 Eclipse。
  4. 添加 android-support-v7-appcompat 。
  5. 清洁,构建项目。
  6. 然后打开主项目并构建所有项目。
  7. 错误仍然存​​在。重启日食。而已。

这对我行得通。

于 2014-12-15T08:49:57.573 回答
0

将 CardView 库导入为 Eclipse 项目而不是 Android 项目

于 2015-02-16T20:32:05.243 回答
0

我通过重新启动eclipse解决了我的问题。还要确保您已在构建路径中添加了 jars 并将其标记为导入/导出。

于 2015-03-23T09:04:30.820 回答
0

这个解决方案对我有用。

1- 转到“sdk\extras\android\m2repository\com\android\support\recyclerview-v7*22.1.1*”(目前为 22.1.1 最新版本。)

2- 使用 Winrar 打开 recyclerview-v7-22.1.1.aar 文件。

3- 有一个名为 classes.jar 的 jar 文件。将其复制到您的项目 libs 文件夹中。

4-右键单击classes.jar,添加到构建路径。

而已。

于 2015-05-13T11:07:40.763 回答
0

相关说明:如果您正在使用支持库,您很确定您的依赖项是正确的,并且您通过搜索“Error inflating class CardView”来到这里,然后确保您的 XML 布局使用<android.support .v7.widget.CardView>而不仅仅是 <CardView>!

这两个错误非常相似,当我意识到我没有注意错误消息中的完整类名并且我在我的布局中使用不支持的 <CardView> 却没有意识到时,我花了几分钟的时间来面对手掌它。

于 2016-09-30T00:49:17.207 回答
0

使用 true --> false 从 gradle.properties 文件中禁用 androidx

android.useAndroidX=false

android.enableJetifier=false

然后将这些行更改为 build.gradle(Module:app) 中的 api v28

compileSdkVersion 28

targetSdkVersion 28

然后将这些行添加到 build.gradle(Module:app)

`implementation 'com.android.support:appcompat-v7:28.0.0'`
`implementation 'com.android.support:recyclerview-v7:28.0.0'`
`implementation 'com.android.support:cardview-v7:28.0.0'`
`implementation 'com.android.support:design:28.0.0'`

然后sync项目

于 2019-09-11T16:04:03.653 回答