EditText控件按BACKSPACE/SHIFT键时应用崩溃的解决请求
问题分析与解决方案
你的崩溃问题根源确实是依赖版本不统一,Android Studio的提示完全正确。从崩溃日志里的关键错误:
java.lang.NoSuchMethodError: No static method dispatchUnhandledKeyEventPre(Landroid/view/View;Landroid/view/KeyEvent;)Z in class Landroid/support/v4/view/ViewCompat;
可以看出,系统在调用ViewCompat.dispatchUnhandledKeyEventPre时找不到这个方法,这是因为你混用了不同版本的Android Support库:
appcompat-v7和design用的是28.0.0-alpha3(预览版)wear用的是28.0.0(正式版)
预览版和正式版的Support库之间存在方法差异,导致AppCompatDelegate在处理键盘按键(BACKSPACE/SHIFT属于系统按键事件)时调用了一个不存在的方法,直接引发崩溃。而解除EditText的绑定后,键盘事件不会触发相关的Support库方法调用,所以崩溃停止,但这只是临时规避,不是根本解决办法。
具体修复步骤:
- 统一所有Support库版本:将所有
com.android.support开头的依赖都换成同一个正式版本(推荐用28.0.0,因为alpha预览版稳定性差) - 同步并重建项目:修改后点击Android Studio的
Sync Project with Gradle Files,然后执行Clean Project和Rebuild Project
修改后的dependencies部分代码如下:
dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') // 统一为28.0.0正式版 implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.google.code.gson:gson:2.8.2' implementation 'com.android.support.constraint:constraint-layout:1.1.2' implementation 'com.android.support:wear:28.0.0' 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:design:28.0.0' compileOnly 'com.google.android.wearable:wearable:2.4.0' }
额外建议:
- 尽量避免使用alpha/beta等预览版本的依赖,除非你需要测试新特性,正式项目优先用稳定版
- 可以使用Gradle的变量来统一管理依赖版本,比如在
build.gradle的ext块中定义supportVersion = '28.0.0',然后所有依赖用"com.android.support:appcompat-v7:${supportVersion}",这样后续更新版本更方便
内容的提问来源于stack exchange,提问作者Common Sense
相关产品推荐
相关产品推荐

