0

当我调用(从片段内部)将键盘隐藏在 runOnUiThread() 中时,键盘会隐藏,但是当我从 activity.getCurrentFocus().post() 内部执行相同操作时,键盘不会隐藏。

1)下面的代码有效

activity.runOnUiThread(new Runnable()
                    {
                        @Override
                        public void run()
                        {
                            InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
                            imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
                        }
            });

2) 但这不是

 activity.getCurrentFocus().post(new Runnable()
                    {
                        @Override
                        public void run()
                        {
                            InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
                            imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
                        }
            });

在哪里view = activity.getCurrentFocus();

android文档说以下内容:-

a) public final void runOnUIThread(Runnable action) - 在 UI 线程上运行指定的操作。如果当前线程是 UI 线程,则立即执行该操作。如果当前线程不是UI线程,则将动作发布到UI线程的事件队列中

b) public boolean post(Runnable action) - 将 Runnable 添加到消息队列中。runnable 将在用户界面线程上运行。

有人可以解释一下吗,在此先感谢!

4

1 回答 1

0

我认为当你这样做时,activity.getCurrentFocus().post()它是在视图完成布局、调整大小和更新之后执行的。因此,如果您的视图不需要更新,则不会执行。您是否尝试添加日志/断点以查看它是否已执行?如果它被执行,可能是键盘刚刚恢复。

于 2016-04-12T18:38:21.820 回答