类膨胀错误和android.support.v7.widget.CardView

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

有遇到同样问题或者解决了这个问题的人,请评论。


@GabrieleMariotti 我已经发布了我的布局,请检查。 - Harsh Pokharna
并且也要发布logcat。 - MysticMagicϡ
@HarshPokharna 你是否已经将库android.support.v7添加到你的项目中了? - Piyush Kukadiya
感谢您提出这个问题,也感谢所有回答这个问题的人。 - Shridutt Kothari
对于那些已经获取了Gradle依赖项并使RecyclerView正常工作但是无法使用CardView(如果您正在使用Android Studio),请运行gradle sync,然后刷新布局。这对我有用。 - Jeel Shah
显示剩余7条评论
14个回答

56

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

转到文件 -> 导入 -> 将现有的Android代码导入工作区 - >浏览(转到sdk / extras / android / support / v7 / cardview) - >单击确定 - >单击完成

您的项目资源管理器现在将显示cardview作为一个项目。

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

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

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

完成了。


2
我有同样的问题。但是当我将CardView作为库项目导入时,它没有任何Java源文件,'src'目录为空。 我检查了sdk extra文件夹中的src文件夹,发现它是空的! - Hamidreza Hosseinkhani
@HamidrezaHosseinkhani 我也遇到了同样的问题。只需忽略空的src文件夹,因为所需的android-support-v7-cardview.jar文件在Android私有库文件夹中。RecyclerView也是如此。答案是正确的。 - Advait Saravade
4
我尝试将CardView和RecyclerView库作为Eclipse项目导入,而不是Android项目,然后就完成了 :) - Hamidreza Hosseinkhani
6
补充此回答,我按照这些说明一步步操作,但仍然遇到了错误。为解决此错误,我进入新的cardview项目并打开其AndroidManifest.xml文件。在那里,我进入了uses-sdk部分,并确保其minSdkVersionmaxSdkVersion我的应用程序的minSdkVersionmaxSdkVersion匹配。在我按照这些步骤后,问题得以解决。 - scottysseus
@ScottScooterWeidenkopf 非常感谢,老兄。我为这个愚蠢的 Bug 挣扎了将近 6 个小时。 - Anirudh
@ScottScooterWeidenkopf,你可能需要将它作为新答案发布,你的解决方案,指出正确的答案。 - Sruit A.Suk

40

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

当你想在较低API设备上使用支持库来实现Recyclerview或CardView时,你不仅需要导入v7库,还需要独立导入Recycler View和Card View支持库。

就像这样:

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'
} 

Google文档在此处指出:https://developer.android.com/training/material/compatibility.html

请参阅依赖项部分。

此外,您可以下载谷歌的RecyclerView示例来进行挖掘。

希望这能有所帮助!


谢谢,救了我的一天! - Bruce
太棒了。当您在XML中的CardView中有项目时,还可以消除“此处不允许元素”的错误。 - Azurespot

12

在我的情况下,我需要做两件事:将 android.support.v7.widget.CardView 添加为库项目,并在 java build path 中添加并检查其 jar 文件。

  1. 选择 File -> Import -> Existing Android code into workspace --> 浏览 (前往 sdk/extras/android/support/v7/cardview) --> 点击确定 --> 点击完成

  2. 右键点击 cardview 项目 --> 属性 --> Android(左侧面板) --> 启用 isLibrary(勾选复选框)--> 应用 --> 确定

  3. 右键点击你的项目 --> 属性 --> Android(左侧面板) --> 添加(在库下)--> cardview --> 应用 --> 确定

  4. 再次右键点击你的项目 --> 构建路径 --> 配置构建路径 --> 在库中添加jar文件 --> 展开 cardview --> 展开 libs --> 选择 android.support.v7.widget.CardView.jar

  5. 在 order and export 中 --> 勾选 android.support.v7.widget.CardView.jar --> 点击确定


仍然存在异常...请帮忙 @piyush - sunil
转到项目 -> 清理 -> 选择项目 -> 确定 - TouchBoarder
2
这是最好的一个..!经过长时间的搜索和苦思冥想,我找到了你..!印度人在Java方面真的很厉害,这完全是我的个人观点! - mfaisalhyder

4

我在这个问题上浪费了好几个小时,最终解决方法是进入"Eclipse"导入的"cardview"项目,然后右键点击>属性>Android>并将其从Android 2.1更改为Lollipop。


对我有用,谢谢。我认为它可以工作,因为我的项目是针对21的,但无论如何还是感谢你的提示 :) - Bishoy Fakhry

4
如果你正在使用IntelliJ,则按照以下步骤进行操作,这个方法确实有效。
1、点击你的项目
2、右键单击-> 打开“模块设置”(F4)
3、从\sdk\extras\android\support\v7\导入CardView
4、将.jar文件添加到CardView模块
5、在你的项目上点击并给CardView添加模块依赖项
6、现在,在CardView上点击“(+)”按钮-> android-> 在顶部你会看到一个复选框(库模块),启用它。
7、点击确定并关闭设置对话框
8、重新构建你的项目并运行它。

2
你有+1,但有时我在想为什么谷歌会想得那么复杂。 - Stoycho Andreev
在这里关键是要检查它是否为库项目。 - Lukas Knuth

3

我添加依赖后出现了错误

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

dependencies { ... compile 'com.android.support:cardview-v7:21.0.+' compile 'com.android.support:recyclerview-v7:21.0.+' }

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


2
这些步骤对我很有用 :)
1. 转到文件 -> 导入 -> 将现有的Android代码导入工作区 --> 浏览(转到sdk / extras / android / support / v7 / cardview)--> 单击确定 --> 单击完成。 2. 您的项目资源管理器现在将显示cardview作为一个项目。 3. 右键单击cardview项目 --> 属性 --> Android(左窗格) --> 启用isLibrary(选中复选框) --> 应用 --> 确定。 4. 现在右键单击您的项目 --> 属性 --> Android(左窗格) --> 添加(在库下) --> cardview --> 应用 --> 确定。 5. 现在再次右键单击您的项目 --> 构建路径 --> 配置构建路径 --> 在项目选项卡下,添加cardview。 6. 还需要执行一项操作以消除错误,即更改cardview库的顺序。 7. 因此,再次右键单击您的项目 --> 属性 --> Android(左窗格)--> 在库窗口中选择cardview lib --> 并向上移动。

1

@sunil

如前所述:

  1. 转到文件 -> 导入 -> 将现有的Android代码导入工作区 --> 浏览(转到sdk / extras / android / support / v7 / cardview) --> 点击确定 --> 点击完成

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

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

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

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

1

要解决这个问题,首先你必须从以下步骤中添加cardview:

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

对我来说这很有效。


0

我通过重启 Eclipse 解决了我的问题。同时确保您已将 JAR 文件添加到构建路径并标记为导入 / 导出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接