扩展类android.support.v7.widget.RecyclerView时出错

时间:2014-08-25 01:15:30

标签: android android-recyclerview

我正在尝试在我现有的项目中使用RecyclerView,构建时没有错误,但在充气时没有找到类似的RecyclerView类错误。看不出我做错了什么。谢谢你的帮助!

// activity_main.xml中

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>

//MainActivity.onCreate
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        ItemData itemsData[] = { new ItemData("Help",R.drawable.visa),
                new ItemData("Delete",R.drawable.sample),
                new ItemData("Cloud",R.drawable.sample),
                new ItemData("Favorite",R.drawable.sample),
                new ItemData("Like",R.drawable.sample),
                new ItemData("Rating",R.drawable.sample)};

        // 2. set layoutManger
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        // 3. create an adapter
        MyAdapter mAdapter = new MyAdapter(itemsData);
        // 4. set adapter
        recyclerView.setAdapter(mAdapter);
        // 5. set item animator to DefaultAnimator
        //recyclerView.setItemAnimator(new DefaultItemAnimator());
        recyclerView.setHasFixedSize(true);
    }

//的build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 20
    buildToolsVersion '19.1.0'

    defaultConfig {
        applicationId "com.domain.project"
        minSdkVersion 19
        targetSdkVersion 20
        versionCode 1
        versionName "1.0"
    }

    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:support-v4:+'
    compile 'com.android.support:support-v13:+'
    compile project(':facebook-3.15')
    compile project(':parse-1.5.1')
    compile project(':viewpagerindicator-2.4.1')
    compile 'com.github.manuelpeinado.fadingactionbar:fadingactionbar:3.1.2'
    compile 'com.android.support:cardview-v7:+'
    compile 'com.android.support:recyclerview-v7:+'
    compile 'com.google.android.gms:play-services:+'
}

configurations {
    // to avoid double inclusion of support libraries
    all*.exclude group: 'com.android.support', module: 'support-v4'
}

// logcat的

08-24 17:49:27.626  27544-27544/com.domain.project E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.domain.project, PID: 27544
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.domain.project/com.domain.project.MainActivity}: android.view.InflateException: Binary XML file line #7: Error inflating class android.support.v7.widget.RecyclerView
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2215)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2264)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5139)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class android.support.v7.widget.RecyclerView
            at android.view.LayoutInflater.createView(LayoutInflater.java:620)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
            at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:343)
            at android.app.Activity.setContentView(Activity.java:1929)
            at com.domain.project.MainActivity.onCreate(MainActivity.java:35)
            at android.app.Activity.performCreate(Activity.java:5231)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2169)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2264)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5139)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.reflect.InvocationTargetException
            at java.lang.reflect.Constructor.constructNative(Native Method)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
            at android.view.LayoutInflater.createView(LayoutInflater.java:594)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
            at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:343)
            at android.app.Activity.setContentView(Activity.java:1929)
            at com.domain.project.MainActivity.onCreate(MainActivity.java:35)
            at android.app.Activity.performCreate(Activity.java:5231)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2169)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2264)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5139)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NoClassDefFoundError: android.support.v4.util.Pools$SimplePool
            at android.support.v7.widget.RecyclerView.<init>(RecyclerView.java:121)
            at android.support.v7.widget.RecyclerView.<init>(RecyclerView.java:213)
            at java.lang.reflect.Constructor.constructNative(Native Method)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
            at android.view.LayoutInflater.createView(LayoutInflater.java:594)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
            at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:343)
            at android.app.Activity.setContentView(Activity.java:1929)
            at com.domain.project.MainActivity.onCreate(MainActivity.java:35)
            at android.app.Activity.performCreate(Activity.java:5231)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2169)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2264)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5139)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612)
            at dalvik.system.NativeStart.main(Native Method)

18 个答案:

答案 0 :(得分:10)

请检查您的支持库是否已更新为最新版..

com.android.support:support-v4:and com.android.support:recyclerview-v7

答案 1 :(得分:2)

我的问题是该库是使用JDK1.6而不是1.7编译的。

在此处找到解决方案link

答案 2 :(得分:2)

在您的布局文件中:

使用:

androidx.recyclerview.widget.RecyclerView

相反:

android.support.v7.widget.RecyclerView

它将为您服务。

如果您不想使用Androidx,请在gradle.properties文件中执行以下操作:

android.useAndroidX=false

android.enableJetifier=false

答案 3 :(得分:2)

或者...就我而言,我将RecyclerView的androidx版本包含在我的依赖项(build.gradle)中,但在我的XML中使用了另一个... Doh。

已替换

android.support.v7.widget.RecyclerView

使用

androidx.recyclerview.widget.RecyclerView

成功了! :)

答案 4 :(得分:2)

只需将以下内容添加到proguard-rules.pro,

即可
-keep public class android.support.v7.widget.** { *; }

答案 5 :(得分:2)

在gradle文件中添加依赖项。

dependencies{
    compile 'com.android.support:appcompat-v7:23.3.0'
    compile 'com.android.support:recyclerview-v7:23.3.0'
}

答案 6 :(得分:1)

对于新的API版本,在build.gradle上-项目依赖项添加:

implementation 'androidx.recyclerview:recyclerview:1.0.0'

并在布局中,应替换:

android.support.v7.widget.RecyclerView

使用

androidx.recyclerview.widget.RecyclerView

答案 7 :(得分:1)

我明白了。在build.gradle中删除以下配置可使recyclerview正常工作。这引出了另一个问题:android studio: gradle dependency error

-

configurations {
    // to avoid double inclusion of support libraries
    all*.exclude group: 'com.android.support', module: 'support-v4'
}

答案 8 :(得分:0)

我有类似的错误消息,并尝试了本网站上的答案中的许多建议步骤。

  

java.lang.RuntimeException:无法启动活动ComponentInfo {com.abc.def / com.abc.def.MainActivity}:android.view.InflateException:二进制XML文件行#8:

终于意识到由于某些原因我布局中的标签是:

android.support.v7.internal.widget.RecyclerView 

而不是

android.support.v7.widget.RecyclerView. 

我不确定&#39;内部&#39;在v7和widget之间悄悄进入,但是一旦我删除它,错误就消失了。不是说其他​​人会犯同样的错误,只是为了让人们知道布局xml中某处的拼写错误可能是导致此错误消息的原因。

答案 9 :(得分:0)

为了让它在我的Eclipse下工作,我在工作区中添加了RecyclerView作为Library。然后添加到我在ANDROID LIBRARY下的项目中。最后。失去了三个小时。

答案 10 :(得分:0)

确保已为recyclerView添加了适当的依赖项。 然后检查您是否对cardView有依赖性。

如果是,则

  • 删除卡片视图依赖项

  • 同步项目

  • 然后再次添加卡片视图依赖项

  • 清理项目

  • 重建项目

对我有用

答案 11 :(得分:0)

检查您的layout.xml文件...不能停止我的笑声... 我犯了一个愚蠢的错误...

我放

<android.support.v7.wodget.RecyclerView

代替

<android.support.v7.widget.RecyclerView

看看小“ o”,它浪费了我30分钟或更长时间来检查其他文件... [期待我的答案可以节省您的时间]

答案 12 :(得分:0)

---引自Android网站。

依赖

要在早于5.0的Android版本(API级别21)中使用这些功能,请将项目中的Android v7支持库包含为Gradle依赖项:

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

答案 13 :(得分:0)

在RecyclerView的xml声明中: 替换

unsigned

使用

<android.support.v7.widget.RecyclerView

希望这行得通^ _ ^

答案 14 :(得分:0)

在这里查看我的答案Error inflating class RecyclerView。 简而言之,您需要导入recyclerview和appcompat依赖项并在尝试将RecyclerView 添加到XML之前同步

答案 15 :(得分:0)

在Gradle文件中添加以下行:

dependencies {
    //recyclerview
    implementation 'androidx.recyclerview:recyclerview:1.0.0'
}

在您的活动layout.xml中添加以下代码:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recyclerview"
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

您的Android Studio自动导入androidx recyclerview。

AndroidX是对原始Android支持库的重大改进。与支持库一样,AndroidX与Android OS分开提供,并在Android版本之间提供向后兼容性。

以下是参考AndroidX: https://developer.android.com/jetpack/androidx

答案 16 :(得分:0)

在互联网上尝试了一切后,我通过观察小错误解决了 recyclerview 膨胀错误。 第一, 你检查了libs文件夹中的android-support-v7-recyclerview.jar库吗?如果是,那么检查您的清单文件是否具有目标sdk版本 21

<uses-sdk
        android:minSdkVersion="11" //or whatever you need
        android:targetSdkVersion="21" />

可能这对未来的某些人有帮助,而不是像我一样浪费时间。

答案 17 :(得分:-1)

我也得到同样的例外。

简单的解决方案是将layout_behaviour添加到回收站视图:

app:layout_behavior="@string/appbar_scrolling_view_behavior"