膨胀类 android.support.v7.widget.RecyclerView 时出错
Posted
技术标签:
【中文标题】膨胀类 android.support.v7.widget.RecyclerView 时出错【英文标题】:Error inflating class android.support.v7.widget.RecyclerView 【发布时间】:2014-10-18 03:04:54 【问题描述】:我正在尝试在我现有的项目中使用 RecyclerView,构建时没有错误,但在充气时没有发现 RecyclerView 的类错误。看不到我做错了什么。感谢您的帮助!
//activity_main.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_
android:layout_/>
</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 ComponentInfocom.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)
【问题讨论】:
这是一个RecylerView Demo recyclerviewdemo GitHub你能正常运行吗? 我尝试创建一个仅用于测试 recyclerview 的新测试项目,它可以工作,但无法弄清楚为什么它在包含在现有项目中时不起作用。这就是为什么我将所有代码从布局复制到 build.gradle recyclerview 目前仅在针对 Android-L 时可用,除非您使用变通方法使其适用于旧版本? 【参考方案1】:或者...在我的情况下,我在我的依赖项 (build.gradle) 中包含了 RecyclerView 的 androidx 版本,但在我的 XML 中使用了另一个版本... Doh。
替换
android.support.v7.widget.RecyclerView
与
androidx.recyclerview.widget.RecyclerView
它成功了! :)
【讨论】:
这太棒了!谢谢+1!【参考方案2】:在RecyclerView的xml声明中: 替换
<android.support.v7.widget.RecyclerView
与
<androidx.recyclerview.widget.RecyclerView
希望这行得通^_^
【讨论】:
这对我也有用。我遵循一些仍然使用android.support.v7.widget.RecyclerView
的教程,但我的 kotlin 已经使用 androidx
。谢谢你【参考方案3】:
请检查您的支持库是否已更新到最新版本..
com.android.support:support-v4: 和 com.android.support:recyclerview-v7
【讨论】:
你得到什么异常??可以分享一下 build.gradle 吗?? android.view.InflateException: Binary XML file line #19: Error inflating class android.support.v7.widget.RecyclerView java.lang.ClassNotFoundException:在路径上找不到类“android.support.v7.recyclerview.R$styleable”:DexPathList[[zip 文件“/data/app/com.example. Mercer-2/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]【参考方案4】:对于新的 API 版本,在 build.gradle - 项目依赖添加:
implementation 'androidx.recyclerview:recyclerview:1.0.0'
在布局中,你应该替换:
android.support.v7.widget.RecyclerView
与
androidx.recyclerview.widget.RecyclerView
【讨论】:
更新:androidx.recyclerview:recyclerview:1.1.0【参考方案5】:在您的布局文件中:
用途:
androidx.recyclerview.widget.RecyclerView
改为:
android.support.v7.widget.RecyclerView
它会为你工作。
如果您不想使用 Androidx,请在您的 gradle.properties
文件中执行以下操作:
android.useAndroidX=false
android.enableJetifier=false
【讨论】:
【参考方案6】:我的问题是该库是使用 JDK1.6 而不是 1.7 编译的。
在这里找到解决方案link
【讨论】:
【参考方案7】:在 gradle 文件中添加依赖。
dependencies
compile 'com.android.support:appcompat-v7:23.3.0'
compile 'com.android.support:recyclerview-v7:23.3.0'
【讨论】:
【参考方案8】:只需将以下内容添加到您的 proguard-rules.pro 中,
-keep public class android.support.v7.widget.** *;
【讨论】:
【参考方案9】:我想通了。删除 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'
【讨论】:
【参考方案10】:确保您已为 recyclerView 添加了正确的依赖项。 然后检查你是否有对cardView的依赖。
如果是,那么
移除卡片视图依赖
同步项目
然后再次添加卡片视图依赖
清理项目
重建项目
它对我有用
【讨论】:
【参考方案11】:在互联网上尝试了所有方法后,我通过观察小错误解决了 recyclerview 膨胀错误。
第一的,
您是否检查了 libs 文件夹中存在的 android-support-v7-recyclerview.jar
库?如果是,则检查您的清单文件的目标 sdk 版本是否为 21
<uses-sdk
android:minSdkVersion="11" //or whatever you need
android:targetSdkVersion="21" />
这可能对将来的某人有所帮助,而不是像我一样浪费时间。
【讨论】:
收到此错误错误:(50, 19) 错误:无法访问 android.support.v4.view.ScrollingView 的 ScrollingView 类文件未找到。如果我添加 V4,它无法在设备上启动应用程序。【参考方案12】:在这里查看我的答案Error inflating class RecyclerView。 简而言之,您需要导入 recyclerview 和 appcompat 依赖项并同步在您尝试将 RecyclerView 添加到您的 XML 之前。
【讨论】:
【参考方案13】:--- 引自 Android 网站。
依赖关系
要在低于 5.0(API 级别 21)的 Android 版本中使用这些功能,请将 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.+'
【讨论】:
【参考方案14】:在我的例子中,为了让它在 Eclipse 下工作,我在工作区中添加了 RecyclerView 作为库。然后添加到我的ANDROID LIBRARY下的项目中。最后。浪费了三个小时。
【讨论】:
【参考方案15】:我收到了类似的相同错误消息,并尝试了本网站答案中的许多建议步骤。
java.lang.RuntimeException:无法启动活动 ComponentInfocom.abc.def/com.abc.def.MainActivity:android.view.InflateException:二进制 XML 文件第 8 行:
终于意识到由于某些原因,我的布局中的标签是:
android.support.v7.internal.widget.RecyclerView
而不是
android.support.v7.widget.RecyclerView.
我不确定“内部”是如何在 v7 和小部件之间潜入的,但是一旦我删除它,错误就消失了。不是说其他人会犯同样的错误,只是让人们知道您的布局 xml 中的某个地方的拼写错误可能是导致此错误消息的原因。
【讨论】:
【参考方案16】:检查您的 layout.xml 文件...忍不住笑了... 我犯了一个愚蠢的错误...
我放了
<android.support.v7.wodget.RecyclerView
而不是
<android.support.v7.widget.RecyclerView
看看小“o”,它浪费了我 30 分钟或更长时间来检查其他文件... [期待我的回答可以节省您的时间]
【讨论】:
【参考方案17】:在 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_
android:layout_>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_
android:layout_
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 操作系统分开发布,并提供跨 Android 版本的向后兼容性。
这里是 AndroidX 的参考: https://developer.android.com/jetpack/androidx
【讨论】:
【参考方案18】:我也遇到了同样的异常。
简单的解决方案是将layout_behaviour
添加到回收站视图:
app:layout_behavior="@string/appbar_scrolling_view_behavior"
【讨论】:
以上是关于膨胀类 android.support.v7.widget.RecyclerView 时出错的主要内容,如果未能解决你的问题,请参考以下文章
膨胀类 CollapsingToolbarLayout 时出错