Android:requestFocus()不是软键盘的字符

时间:2012-09-28 11:44:37

标签: android android-edittext fragment android-softkeyboard

在活动中说MainActivity,我已经以编程方式添加了片段Fragment_1

Fragment_1的布局包含EditText。当我开始显示此Fragment_1时,EditText会得到关注但soft keyboard未展开

所以我点击EditText打开keyboardtype some textclick done button,这必须将Fragment_1替换为Fragment_2包含EditText

EditText中的Fragment_2不是focused,而keyboard仍然是open(可能是因为Fragment_1

所以我为Fragment_2

添加了此内容
EditText.requestFocus();

焦点在那里,键盘已打开,但EditText没有被我点击的关键字填充。

为什么会这样?

谢谢。

2 个答案:

答案 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似乎有效。

Please look at a beautiful analysis here