在活动中说MainActivity
,我已经以编程方式添加了片段Fragment_1
此Fragment_1
的布局包含EditText
。当我开始显示此Fragment_1
时,EditText
会得到关注但soft keyboard
未展开
所以我点击EditText
打开keyboard
,type some text
和click done button
,这必须将Fragment_1
替换为Fragment_2
包含EditText
。
但EditText
中的Fragment_2
不是focused
,而keyboard
仍然是open
(可能是因为Fragment_1
)
所以我为Fragment_2
EditText.requestFocus();
焦点在那里,键盘已打开,但EditText
没有被我点击的关键字填充。
为什么会这样?
谢谢。
答案 0 :(得分:1)
您应该隐藏第一个片段
上的第一个编辑文本的键盘private InputMethodManager mInputMethodManager = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
EditText.clearFocus();
mInputMethodManager.hideSoftInputFromWindow(EditText.getWindowToken(), 0);
并且您应该请求焦点并显示第二个编辑文本的键盘:
EditText.requestFocus();
mInputMethodManager.showSoftInput(EditText, 0);
答案 1 :(得分:0)
输入方法管理器忽略键盘请求,除非EditText
和它们两者都有焦点。因此,在输入Activity
/ Dialog
后,您需要等到焦点确定后才能请求键盘。您可以通过在InputMethodManager
中调用OnFocusChangeListener
服务来完成此操作,但是视图可以在Window本身之前获得焦点,因此您必须等待Window焦点。您无法在Window对象本身上添加OnFocusChangeListener
,但是监听View焦点并发布Runnable似乎有效。