我有一个带有单个 EditText 且没有按钮的自定义 DialogFragment。在将文本输入编辑文本并按“完成”后,即使对话框已关闭,键盘仍会在返回主机活动时保持可见。它更改为数字键盘,因为它关注的主机活动中的字段只是一个数字输入edittext
- 但它也可能关注一个带有普通文本输入的edittext字段(因此仍然是普通键盘),具体取决于我离开的位置启动对话框片段后的光标。
我已经尝试了我能找到的一切(谷歌搜索和stackoverflowed了很多)。
我基于这段代码的对话片段 - 它非常相似。
问题与此非常相似,我认为原因可能相似,但我的 DialogFragment 中没有按钮,因此我无法遵循该解决方案,尽管我认为这并不重要,但我可以足够密切地遵循它。
我已经尝试inputmethodmanager
按照那里和这里的建议在接口方法(在主机活动中实现)和 DialogFragment 类中使用来onCreateView
关闭onEditorAction
键盘onDismiss
。还在DialogFragment 类方法中尝试getDialog().getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
(也使用)。SOFT_INPUT_STATE_HIDDEN
在所有 DF 类方法中也尝试mEditText.clearFocus();
过,但无济于事。
任何人都可以提供帮助吗?是与我所基于的大卫钱德勒的代码有关,还是与我做错了什么有关。非常感谢所有帮助。
我在下面包括我的 DF 类,以防有人想看。
public class SetText extends DialogFragment {
public interface SetTextBoxDialogListener{
void onFinishEnteringName(String name);
}
private EditText mEditText;
//Empty constructor req'd for dialogfragment.
public SetText(){
}
//Build view
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle saveInstanceState) {
View view = inflater.inflate(R.layout.activity_set_the_text, container);
mEditText = (EditText) view.findViewById(R.id.nameText);
getDialog().setTitle("Enter Name");
//removing these 2 lines of code has no effect
mEditText.requestFocus();
getDialog().getWindow().setSoftInputMode(LayoutParams.VISIBLE);
mEditText.setOnEditorActionListener(new OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (EditorInfo.IME_ACTION_DONE==actionId){
//return text to activity
SetEnterNameDialogListener activity = (SetEnterNameDialogListener) getActivity();
activity.onFinishEnteringName(mEditText.getText().toString());
dismiss();
return true;
}
//code for 2 lines below had now effect, even placed above dismiss
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0);
return false;
}
});
return view;
}
}