【发布时间】:2020-02-09 21:54:21
【问题描述】:
我有使用 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";
}
Kotlin 代码
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: 没有虚拟方法 类中的 hideSoftInputFromWindow(Landroid/os/IBinder;I)V landroid/view/inputmethod/InputMethodManager;或其超类 (出现'android.view.inputmethod.InputMethodManager'的声明 在 /system/framework/framework.jar:classes2.dex)"
【问题讨论】:
标签: java android kotlin inputmethodmanager