У меня есть код на Java, который скрывает программную клавиатуру с помощью InputMethodManager. Когда я конвертирую код в 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 code
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)"