0

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

Fragment_1有一个布局,其中包含一个EditText. 当我开始显示此内容Fragment_1时,EditText焦点集中但未soft keyboard打开

所以我点击EditText打开keyboard,type some textclick done button,它必须替换Fragment_1Fragment_2其中还包含一个EditText.

但是 this EditTextin Fragment_2is not focused,但 the keyboardis still open(可能是因为 last Fragment_1

所以我添加了这个Fragment_2

EditText.requestFocus();

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

为什么会这样??

谢谢你。

4

2 回答 2

1

您应该为第一个片段上的第一个编辑文本隐藏键盘

private InputMethodManager mInputMethodManager = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
EditText.clearFocus();
mInputMethodManager.hideSoftInputFromWindow(EditText.getWindowToken(), 0);

并且您应该为第二个编辑文本请求焦点并显示键盘:

EditText.requestFocus();
mInputMethodManager.showSoftInput(EditText, 0);
于 2012-09-28T11:47:59.720 回答
0

输入法管理器会忽略键盘请求,除非它EditText和它所在的 Window 都具有焦点。因此,在输入Activity/Dialog后,您需要等到焦点稳定下来后再请求键盘。您可以通过在 中调用InputMethodManager服务来做到这一点OnFocusChangeListener,但 Views 可以在 Window 本身之前获得焦点,因此您必须等待 Window 获得焦点。您无法找到OnFocusChangeListener在 Window 对象本身上添加一个,但监听 View 焦点并发布一个 Runnable 似乎有效。

请在这里看一个漂亮的分析

于 2014-02-28T10:06:20.053 回答