我有这样的逻辑:当进入编辑活动时,我将首先显示弹出窗口,然后在onDismissListener回调中显示软键盘,但是当我在回调中直接调用 showKeyboard 时,软件键盘没有显示。只有我调用class Foo <RQ extends Request, RS extends Response> {
RS foo(RQ rq) {
return foo3(foo2(rq));
}
RS foo2(RQ rq) {
return null;
}
RS foo3(RS rs) {
return rs;
}
}
,它才会按预期显示。同样,活动软键盘选项设置为view.postRunnable
android:windowSoftInputMode="stateHidden|adjustResize"
答案 0 :(得分:1)
除非有深入了解UI框架内部设备的人来回答,否则每个人的回答都将是“最佳猜测”。以下是我最好的猜测:
这很可能与Window
和WindowManager
以及它们与Views
和键盘的互动方式有关。
传递给方法的EditText
有一个令牌到你的活动窗口,这是我的猜测:
如果窗口不在前台,则无法显示键盘。因此,当您post
方法调用时,该方法将在Popup的Window消失后执行,而Activity中的Window位于Foreground中。
答案 1 :(得分:0)
onDismiss()
回调很可能是从非UI线程调用的,因此您无法直接更新UI。这就是您需要使用view.postRunnable()
将其发布到UI线程的原因。