当我(从片段内部)调用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()
时,它是在视图布局、重新调整大小和更新之后执行的。因此,如果您的视图不需要更新,则不会执行。你有没有试着添加日志/断点来看看它是否被执行了?如果它被执行了,可能是键盘刚刚恢复正常。