软键盘隐藏调用在view.post()中未按预期工作,但在runOnUIThread()中工作良好



当我(从片段内部)调用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();

安卓文档说明如下:-

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

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

有人能解释一下吗?提前谢谢!

我认为当您执行activity.getCurrentFocus().post()时,它是在视图布局、重新调整大小和更新之后执行的。因此,如果您的视图不需要更新,则不会执行。你有没有试着添加日志/断点来看看它是否被执行了?如果它被执行了,可能是键盘刚刚恢复正常。

相关内容

  • 没有找到相关文章

最新更新