Я отображаю EditText
как один элемент стиля списка AlertDialog
(который поддерживается реализацией ListView
по умолчанию). Я как бы ожидал, что это обстоятельство не изменит поведение EditText, но это так: щелчок по EditText больше не вызывает программную клавиатуру.
После часа возни с настройками фокуса и обработчиками щелчков я сыт по горло и отлажен в InputMethodManager.showSoftInput()
, и нашел это:
public boolean showSoftInput(View view, int flags,
ResultReceiver resultReceiver) {
...
if (mServedView != view && (mServedView == null
|| !mServedView.checkInputConnectionProxy(view))) {
return false;
}
...
}
}
Проблема здесь в том, что mServedView
- это ListView, который поддерживает диалог, в то время как view
- это EditText, а ListView.checkInputConnectionProxy()
делает просто return false
в реализации ListView по умолчанию (для переопределения подклассами).
Хуже того, я не смог найти способ установить пользовательский ListView, который бы позволял передавать запросы IME; AlertDialog.Builder.setView()
принимает пользовательский ListView, но это не ListView, который видит InputMethodManager.
Есть предложения, как решить эту проблему?