当迁移到androidx时,按回键时出现错误。
java.lang.NoSuchMethodError: No static method dispatchUnhandledKeyEventPre(Landroid/view/View;Landroid/view/KeyEvent;)Z in class Landroidx/core/view/ViewCompat; or its super classes (declaration of 'androidx.core.view.ViewCompat' appears in 1/split_lib_dependencies_apk.apk)
at androidx.appcompat.app.AppCompatDelegateImpl.dispatchKeyEvent(AppCompatDelegateImpl.java:1162)
at androidx.appcompat.app.AppCompatDelegateImpl$AppCompatWindowCallback.dispatchKeyEvent(AppCompatDelegateImpl.java:2529)
at androidx.appcompat.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:59)
at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:329)
at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4792)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4759)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4082)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4135)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4101)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4109)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4082)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4135)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4101)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4257)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4109)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4314)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4082)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4135)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4101)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4109)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4082)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4135)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4101)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4290)
at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:4451)
at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2434)
at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1998)
at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1989)
at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:2411)
at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:323)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:6351)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:896)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:786)
我认为ViewCompat类中没有dispatchUnhandledKeyEventPre
方法。我正在使用一些第三方依赖项,所以我不知道是哪种方法引起的
答案 0 :(得分:4)
检查您使用的是Appcompat库的1.0.0-beta01版本
答案 1 :(得分:3)
对我来说,转到gradle.build文件并确保所有依赖项都是最新的(新版本)可以解决此问题。
答案 2 :(得分:1)
被接受的答案虽然正确,但在不久的将来将发布appcompat
的较新版本时,由于答案是特定于特定时间范围的,因此将很快过时。
通常的答案是,当您在项目中使用appcompat
(appcompat库)的不同混合版本时,就会发生这种情况,它们之间往往会更加不兼容。每次通过SDK Manager更新某些API时,都必须检查是否正在使用最新版本的appcompat库。如果您使用的是Android Studio,则更新起来非常容易。
转到您的build.gradle (Module: app)
并查看相关性。 gradle linter很可能已经向您显示了您正在使用不同版本的appcompat库的错误,以及是否有较新的版本。如果将鼠标悬停在那些突出显示的行上,它将为您提供所需的所有信息,包括您正在使用的版本,最新的可用版本以及所有依赖项是否在同一版本上。按照提示进行操作,修复它们,然后运行gradle sync
,您应该会很好。
例如,我使用的是com.android.support:appcompat-v7:28.0.0-alpha3
,com.android.support:design:28.0.0
和com.android.support.constraint:constraint-layout:1.1.2
的混合版本,而最新版本是v28.0.0
和v1.1.3
。
希望这会有所帮助。