我有使用 InputMethodManager 隐藏软键盘的 Java 代码。当我将代码转换为 Kotlin 时,相同的代码会引发 NoMethodFound 异常。
我可以轻松地在 Java 和 Kotlin 版本之间切换,并演示 Java 中的正确行为和 Kotlin 中的错误行为。
Java 代码
searchText.clearFocus();
InputMethodManager imm = (InputMethodManager)dialog.getContext().getSystemService(Activity.INPUT_METHOD_SERVICE);
try {
imm.hideSoftInputFromWindow(searchText.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
} catch (Throwable t) {
String stop = "here";
}
科特林代码
searchText!!.clearFocus()
val imm = dialog!!.context.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
try {
imm.hideSoftInputFromWindow(searchText!!.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)
} catch (t: Throwable) {
val stop = "here"
}
Java 代码表现出正确的行为并关闭软键盘。Kotlin 代码抛出异常
"java.lang.NoSuchMethodError: 类 Landroid/view/inputmethod/InputMethodManager 中没有虚拟方法 hideSoftInputFromWindow(Landroid/os/IBinder;I)V; 或其超类('android.view.inputmethod.InputMethodManager' 的声明出现在 /系统/框架/framework.jar:classes2.dex)"