滑动以从 listView 中删除项目:收到错误解析失败:Landroid/support/v4/animation/AnimatorListenerCompat;
Swipe to delete item from listView: getting error Failed resolution of: Landroid/support/v4/animation/AnimatorListenerCompat;
我有一个由 Room 数据库提供支持的 RecyclerView。我想在列表中添加滑动删除功能,但是每次滑动都会出现以下错误:
2018-10-31 20:10:47.607 3613-3613/com.andygix.programarilucia E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.andygix.programarilucia, PID: 3613
java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/animation/AnimatorListenerCompat;
at com.andygix.programarilucia.AppointmentListFullView.onCreate(AppointmentListFullView.java:50)
at android.app.Activity.performCreate(Activity.java:7372)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1218)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3147)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3302)
at android.app.ActivityThread.-wrap12(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1891)
at android.os.Handler.dispatchMessage(Handler.java:108)
at android.os.Looper.loop(Looper.java:166)
at android.app.ActivityThread.main(ActivityThread.java:7425)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.v4.animation.AnimatorListenerCompat" on path: DexPathList[[zip file "/data/app/com.andygix.programarilucia-x3B7sSOmUwFsUh9BkB3PXA==/base.apk", zip file "/data/app/com.andygix.programarilucia-x3B7sSOmUwFsUh9BkB3PXA==/split_lib_dependencies_apk.apk", zip file "/data/app/com.andygix.programarilucia-x3B7sSOmUwFsUh9BkB3PXA==/split_lib_resources_apk.apk", zip file "/data/app/com.andygix.programarilucia-x3B7sSOmUwFsUh9BkB3PXA==/split_lib_slice_0_apk.apk", zip file "/data/app/com.andygix.programarilucia-x3B7sSOmUwFsUh9BkB3PXA==/split_lib_slice_1_apk.apk", zip file "/data/app/com.andygix.programarilucia-x3B7sSOmUwFsUh9BkB3PXA==/split_lib_slice_2_apk.apk", zip file "/data/app/com.andygix.programarilucia-x3B7sSOmUwFsUh9BkB3PXA==/split_lib_slice_3_apk.apk", zip file "/data/app/com.andygix.programarilucia-x3B7sSOmUwFsUh9BkB3PXA==/split_lib_slice_4_apk.apk", zip file "/data/app/com.andygix.programarilucia-x3B7sSOmUwFsUh9BkB3PXA==/split_lib_slice_5_apk.apk", zip file "/data/app/com.andygix.programarilucia-x3B7sSOmUwFsUh9BkB3PXA==/split_lib_slice_6_apk.apk", zip file "/data/app/com.andygix.programarilucia-x3B7sSOmUwFsUh9BkB3PXA==/split_lib_slice_7_apk.apk", zip file "/data/app/com.andygix.programarilucia-x3B7sSOmUwFsUh9BkB3PXA==/split_lib_slice_8_apk.apk", zip file "/data/app/com.andygix.programarilucia-x3B7sSOmUwFsUh9BkB3PXA==/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.andygix.programarilucia-x3B7sSOmUwFsUh9BkB3PXA==/lib/arm64, /system/lib64, /vendor/lib64, /product/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at com.andygix.programarilucia.AppointmentListFullView.onCreate(AppointmentListFullView.java:50)
at android.app.Activity.performCreate(Activity.java:7372)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1218)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3147)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3302)
at android.app.ActivityThread.-wrap12(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1891)
at android.os.Handler.dispatchMessage(Handler.java:108)
at android.os.Looper.loop(Looper.java:166)
at android.app.ActivityThread.main(ActivityThread.java:7425)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
Suppressed: java.io.IOException: No original dex files found for dex location /data/app/com.andygix.programarilucia-x3B7sSOmUwFsUh9BkB3PXA==/split_lib_resources_apk.apk
at dalvik.system.DexFile.openDexFileNative(Native Method)
at dalvik.system.DexFile.openDexFile(DexFile.java:353)
at dalvik.system.DexFile.<init>(DexFile.java:100)
at dalvik.system.DexFile.<init>(DexFile.java:74)
at dalvik.system.DexPathList.loadDexFile(DexPathList.java:374)
at dalvik.system.DexPathList.makeDexElements(DexPathList.java:337)
at dalvik.system.DexPathList.<init>(DexPathList.java:157)
at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:65)
at dalvik.system.PathClassLoader.<init>(PathClassLoader.java:64)
at com.android.internal.os.PathClassLoaderFactory.createClassLoader(PathClassLoaderFactory.java:43)
at android.app.ApplicationLoaders.getClassLoader(ApplicationLoaders.java:75)
at android.app.ApplicationLoaders.getClassLoader(ApplicationLoaders.java:38)
at android.app.LoadedApk.createOrUpdateClassLoaderLocked(LoadedApk.java:716)
at android.app.LoadedApk.getClassLoader(LoadedApk.java:749)
此外,它还会创建一个新字段,其中包含在 Room 数据库中输入的最后一个值。
new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0,
ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
appointmentViewModel.delete(adapter.getAppointmentAtPos(viewHolder.getAdapterPosition()));
Toast.makeText(context, "Programarea a fost stearsa", Toast.LENGTH_SHORT).show();
}
}).attachToRecyclerView(appointmentList);
据我所知,似乎存在兼容性问题(虽然不确定),因为错误是针对 support/v4 而我使用 [=24= gradle 文件中的 ]v7。
我的 gradle.app 文件如下所示:
android {
compileSdkVersion 24
defaultConfig {
applicationId "com.andygix.programarilucia"
minSdkVersion 24
targetSdkVersion 24
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
//implementation 'com.android.support:support-v4:26.0.1'
implementation 'com.android.support:appcompat-v7:24.2.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.google.android.gms:play-services-auth:12.0.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'com.android.support:recyclerview-v7:24.2.1'
implementation 'com.android.support:cardview-v7:28.0.0'
implementation 'com.github.bumptech.glide:glide:3.7.0'
implementation 'com.android.volley:volley:1.0.0'
implementation 'com.google.code.gson:gson:2.6.2'
// Room components
implementation "android.arch.persistence.room:runtime:$rootProject.roomVersion"
annotationProcessor "android.arch.persistence.room:compiler:$rootProject.roomVersion"
androidTestImplementation "android.arch.persistence.room:testing:$rootProject.roomVersion"
// Lifecycle components
implementation "android.arch.lifecycle:extensions:1.1.1"
annotationProcessor "android.arch.lifecycle:compiler:$rootProject.archLifecycleVersion"
}
关于如何在不更改支持版本号的情况下使滑动删除起作用的任何想法?
在最后加上这个
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'com.android.support') {
// Skip multidex because it follows a different versioning pattern.
if (!requested.name.startsWith("multidex")) {
details.useVersion '25.3.0'
}
}
}
}
应用模块 build.gradle
我有一个由 Room 数据库提供支持的 RecyclerView。我想在列表中添加滑动删除功能,但是每次滑动都会出现以下错误:
2018-10-31 20:10:47.607 3613-3613/com.andygix.programarilucia E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.andygix.programarilucia, PID: 3613
java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/animation/AnimatorListenerCompat;
at com.andygix.programarilucia.AppointmentListFullView.onCreate(AppointmentListFullView.java:50)
at android.app.Activity.performCreate(Activity.java:7372)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1218)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3147)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3302)
at android.app.ActivityThread.-wrap12(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1891)
at android.os.Handler.dispatchMessage(Handler.java:108)
at android.os.Looper.loop(Looper.java:166)
at android.app.ActivityThread.main(ActivityThread.java:7425)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.v4.animation.AnimatorListenerCompat" on path: DexPathList[[zip file "/data/app/com.andygix.programarilucia-x3B7sSOmUwFsUh9BkB3PXA==/base.apk", zip file "/data/app/com.andygix.programarilucia-x3B7sSOmUwFsUh9BkB3PXA==/split_lib_dependencies_apk.apk", zip file "/data/app/com.andygix.programarilucia-x3B7sSOmUwFsUh9BkB3PXA==/split_lib_resources_apk.apk", zip file "/data/app/com.andygix.programarilucia-x3B7sSOmUwFsUh9BkB3PXA==/split_lib_slice_0_apk.apk", zip file "/data/app/com.andygix.programarilucia-x3B7sSOmUwFsUh9BkB3PXA==/split_lib_slice_1_apk.apk", zip file "/data/app/com.andygix.programarilucia-x3B7sSOmUwFsUh9BkB3PXA==/split_lib_slice_2_apk.apk", zip file "/data/app/com.andygix.programarilucia-x3B7sSOmUwFsUh9BkB3PXA==/split_lib_slice_3_apk.apk", zip file "/data/app/com.andygix.programarilucia-x3B7sSOmUwFsUh9BkB3PXA==/split_lib_slice_4_apk.apk", zip file "/data/app/com.andygix.programarilucia-x3B7sSOmUwFsUh9BkB3PXA==/split_lib_slice_5_apk.apk", zip file "/data/app/com.andygix.programarilucia-x3B7sSOmUwFsUh9BkB3PXA==/split_lib_slice_6_apk.apk", zip file "/data/app/com.andygix.programarilucia-x3B7sSOmUwFsUh9BkB3PXA==/split_lib_slice_7_apk.apk", zip file "/data/app/com.andygix.programarilucia-x3B7sSOmUwFsUh9BkB3PXA==/split_lib_slice_8_apk.apk", zip file "/data/app/com.andygix.programarilucia-x3B7sSOmUwFsUh9BkB3PXA==/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.andygix.programarilucia-x3B7sSOmUwFsUh9BkB3PXA==/lib/arm64, /system/lib64, /vendor/lib64, /product/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at com.andygix.programarilucia.AppointmentListFullView.onCreate(AppointmentListFullView.java:50)
at android.app.Activity.performCreate(Activity.java:7372)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1218)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3147)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3302)
at android.app.ActivityThread.-wrap12(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1891)
at android.os.Handler.dispatchMessage(Handler.java:108)
at android.os.Looper.loop(Looper.java:166)
at android.app.ActivityThread.main(ActivityThread.java:7425)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
Suppressed: java.io.IOException: No original dex files found for dex location /data/app/com.andygix.programarilucia-x3B7sSOmUwFsUh9BkB3PXA==/split_lib_resources_apk.apk
at dalvik.system.DexFile.openDexFileNative(Native Method)
at dalvik.system.DexFile.openDexFile(DexFile.java:353)
at dalvik.system.DexFile.<init>(DexFile.java:100)
at dalvik.system.DexFile.<init>(DexFile.java:74)
at dalvik.system.DexPathList.loadDexFile(DexPathList.java:374)
at dalvik.system.DexPathList.makeDexElements(DexPathList.java:337)
at dalvik.system.DexPathList.<init>(DexPathList.java:157)
at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:65)
at dalvik.system.PathClassLoader.<init>(PathClassLoader.java:64)
at com.android.internal.os.PathClassLoaderFactory.createClassLoader(PathClassLoaderFactory.java:43)
at android.app.ApplicationLoaders.getClassLoader(ApplicationLoaders.java:75)
at android.app.ApplicationLoaders.getClassLoader(ApplicationLoaders.java:38)
at android.app.LoadedApk.createOrUpdateClassLoaderLocked(LoadedApk.java:716)
at android.app.LoadedApk.getClassLoader(LoadedApk.java:749)
此外,它还会创建一个新字段,其中包含在 Room 数据库中输入的最后一个值。
new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0,
ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
appointmentViewModel.delete(adapter.getAppointmentAtPos(viewHolder.getAdapterPosition()));
Toast.makeText(context, "Programarea a fost stearsa", Toast.LENGTH_SHORT).show();
}
}).attachToRecyclerView(appointmentList);
据我所知,似乎存在兼容性问题(虽然不确定),因为错误是针对 support/v4 而我使用 [=24= gradle 文件中的 ]v7。
我的 gradle.app 文件如下所示:
android {
compileSdkVersion 24
defaultConfig {
applicationId "com.andygix.programarilucia"
minSdkVersion 24
targetSdkVersion 24
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
//implementation 'com.android.support:support-v4:26.0.1'
implementation 'com.android.support:appcompat-v7:24.2.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.google.android.gms:play-services-auth:12.0.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'com.android.support:recyclerview-v7:24.2.1'
implementation 'com.android.support:cardview-v7:28.0.0'
implementation 'com.github.bumptech.glide:glide:3.7.0'
implementation 'com.android.volley:volley:1.0.0'
implementation 'com.google.code.gson:gson:2.6.2'
// Room components
implementation "android.arch.persistence.room:runtime:$rootProject.roomVersion"
annotationProcessor "android.arch.persistence.room:compiler:$rootProject.roomVersion"
androidTestImplementation "android.arch.persistence.room:testing:$rootProject.roomVersion"
// Lifecycle components
implementation "android.arch.lifecycle:extensions:1.1.1"
annotationProcessor "android.arch.lifecycle:compiler:$rootProject.archLifecycleVersion"
}
关于如何在不更改支持版本号的情况下使滑动删除起作用的任何想法?
在最后加上这个
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'com.android.support') {
// Skip multidex because it follows a different versioning pattern.
if (!requested.name.startsWith("multidex")) {
details.useVersion '25.3.0'
}
}
}
}
应用模块 build.gradle