我正在将一个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的方法,以允许代理IME请求。虽然AlertDialog.Builder.setView()
接受一个自定义ListView,但这不是InputMethodManager所看到的ListView。有什么建议可以解决这个问题吗?