扩展类和android.support.v7.widget.CardView时出错

时间:2014-10-21 19:05:40

标签: android eclipse android-5.0-lollipop android-recyclerview android-cardview

我想在我的项目中使用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>

这是我的logcat

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

遇到同样问题或解决了问题的人,请发表评论。

15 个答案:

答案 0 :(得分:56)

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

转到文件 - &gt;导入 - &gt;现有的Android代码进入工作区 - &gt;浏览(转到sdk / extras / android / support / v7 / cardview) - &gt;点击确定 - &gt;单击“完成”

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

右键单击cardview项目 - &gt;属性 - &gt; Android(左窗格) - &gt;启用isLibrary(勾选复选框) - &gt;申请 - &gt;确定

现在右键单击您的项目 - &gt;属性 - &gt; Android(左窗格) - &gt;添加(在库下) - &gt; cardview - &gt;申请 - &gt;确定

现在再次右键点击您的项目 - &gt;构建路径 - &gt;配置构建路径 - &gt;在“项目”选项卡下,添加cardview

你已经完成了。

答案 1 :(得分:39)

我猜您的问题不在您的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样本进行挖掘。

希望这会有所帮助!

答案 2 :(得分:12)

在我的情况下,我必须同时添加android.support.v7.widget.CardView作为库项目,并在java build path中添加+检查它的jar文件

  1. 转到文件 - &gt;导入 - &gt;现有的Android代码进入工作区 - &gt;浏览(转到sdk / extras / android / support / v7 / cardview) - &gt;点击确定 - &gt;单击“完成”

  2. 右键单击cardview项目 - &gt;属性 - &gt; Android(左窗格) - &gt;启用isLibrary(勾选复选框) - &gt;申请 - &gt;好的

  3. 右键点击您的项目 - &gt;属性 - &gt; Android(左窗格) - &gt;添加(在库下) - &gt; cardview - &gt;申请 - &gt;好的

  4. 再次右键点击您的项目 - &gt;构建路径 - &gt;在库下配置构建路径 - &gt; - &gt;添加jar - &gt;展开cardview - &gt;展开libs - &gt;选择android.support.v7.widget.CardView.jar

  5. 在订单和导出下 - &gt;检查android.support.v7.widget.CardView.jar - &gt;点击确定

答案 3 :(得分:4)

我浪费了几个小时的时间,对我而言,拼图的最后一部分是去了&#34; cardview&#34;已作为Android项目导入Eclipse的项目,然后右键单击&gt;属性&gt; android&gt;并将其从Android 2.1更改为Lollipop!

答案 4 :(得分:4)

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

  • 点击您的项目,
  • 右键单击 - &gt;打开模块设置(f4)
  • 从\ sdk \ extras \ android \ support \ v7 \
  • 导入cardview
  • 将.jar文件添加到cardview模块
  • 点击您的项目并将模块依赖性提供给cardview
  • 现在,点击cardview上的(+)按钮 - &gt; android - &gt;在顶部,您将看到一个复选框(库模块),启用它。
  • 单击“确定”并关闭设置对话框。
  • 重建项目并运行它。

答案 5 :(得分:3)

我通过添加依赖项

得到了错误

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

依赖{     ...     编译&#39; com.android.support:cardview-v7:21.0。+&#39;     编译&#39; com.android.support:recyclerview-v7:21.0。+&#39; }

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

答案 6 :(得分:2)

这些步骤对我有用:)

转到文件 - &gt;导入 - &gt;现有的Android代码进入工作区 - &gt;浏览(转到sdk / extras / android / support / v7 / cardview) - &gt;点击确定 - &gt;单击“完成”

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

右键单击cardview项目 - &gt;属性 - &gt; Android(左窗格) - &gt;启用isLibrary(勾选复选框) - &gt;申请 - &gt;确定

现在右键单击您的项目 - &gt;属性 - &gt; Android(左窗格) - &gt;添加(在库下) - &gt; cardview - &gt;申请 - &gt;确定

现在再次右键点击您的项目 - &gt;构建路径 - &gt;配置构建路径 - &gt;在“项目”选项卡下,添加cardview

您应该要求删除错误的另一个步骤,即cardview lib的顺序。

所以再次右击你的项目 - &gt;属性 - &gt; Android(左窗格) - &gt;在库窗口中选择cardview lib - &gt;并向上移动

答案 7 :(得分:1)

@sunil

如前所述:

  
      
  1. 转到文件 - &gt;导入 - &gt;现有的Android代码进入工作区 - &gt;浏览(转到sdk / extras / android / support / v7 / cardview) - &gt;点击确定 - &gt;单击“完成”

  2.   
  3. 右键单击cardview项目 - &gt;属性 - &gt; Android(左窗格) - &gt;启用isLibrary(勾选复选框) - &gt;申请 - &gt;确定

  4.   
  5. 右键点击您的项目 - &gt;属性 - &gt; Android(左窗格) - &gt;添加(在库下) - &gt; cardview - &gt;申请 - &gt;确定

  6.   

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

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

答案 8 :(得分:1)

解决此问题。 首先,您必须从

添加cardview
  1. 关闭主项目。
  2. 删除android-support-v7-appcompat。
  3. 重启Eclipse。
  4. 添加android-support-v7-appcompat。
  5. 清洁,构建项目。
  6. 然后打开主项目并构建所有项目。
  7. 错误仍然存​​在。重启eclipse。就是这样。
  8. 这适合我。

答案 9 :(得分:0)

将CardView库导入为Eclipse Project而不是Android Project

答案 10 :(得分:0)

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

答案 11 :(得分: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,添加到构建路径。

多数民众赞成。

答案 12 :(得分:0)

相关说明:如果您正在使用支持库,那么您非常确定您的依赖关系是否正确,并且您通过搜索&#34;错误充气类CardView来获取此处,&#34 ;然后确保您的XML布局使用&lt; android.support.v7.widget.CardView&gt; ,而不仅仅是&lt; CardView&gt;!

这两个错误非常相似,当我意识到我没有注意错误消息中的完整类名并且我使用的是非支持&lt; CardView&gt时,我花了几分钟时间才能看到这个错误。 ;在我的布局中没有意识到它。

答案 13 :(得分: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个项目

答案 14 :(得分:-1)

如果您正在使用VISUAL STUDIO并出现此错误,请尝试重新启动VS,然后重新启动Rebuild Solution。这对我有用。希望这能节省一些时间。