android - 带有 edittext 的 DialogFragment 在解雇后不会丢失键盘

标签 android focus android-edittext android-softkeyboard dialogfragment

我有一个带有单个 EditText 且没有按钮的自定义 DialogFragment。在将文本输入编辑文本并按下“完成”后,即使对话框被关闭,键盘在返回主机 Activity 时仍然可见。它更改为数字键盘,因为它关注的主机 Activity 中的字段只是一个数字输入 edittext - 但它也可能关注一个带有普通文本输入的编辑文本字段 I普通键盘)取决于我在启动对话框 fragment 后将光标留在何处。

我已经尝试了所有我能找到的东西(用 google 和 stackoverflow 搜索了很多)。

我的 dialogfragment 基于 this代码 - 它非常相似。

问题与this 非常相似,我认为原因可能相似,但我的 DialogFragment 中没有按钮,所以我无法遵循该解决方案,但我认为这并不重要,我可以足够密切地遵循它。

我已经按照那里的建议尝试使用 inputmethodmanagerhere在接口(interface)方法(在宿主 Activity 中实现)和 DialogFragment 类中的 onCreateViewonEditorActiononDismiss 中关闭键盘。还在 DialogFragment 类方法中尝试了 getDialog().getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);(也使用了 SOFT_INPUT_STATE_HIDDEN)。在所有 DF 类方法中也尝试过 mEditText.clearFocus(); 但无济于事。

有人能帮忙吗?与David Chandler's code有关吗?我基于我的,或者我做错了什么。非常感谢所有帮助。

我在下面包含了我的 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;
}
}

最佳答案

在您从 DialogFragment 返回的 list 中的主机 Activity 标记中使用以下内容

android:windowSoftInputMode="stateHidden" 

关于android - 带有 edittext 的 DialogFragment 在解雇后不会丢失键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15375559/

相关文章:

android - 如何使用户无法返回,除非他们单击按钮

android - EditText 改变样式

Android Support v4 版本 22.2.0 无法解析 FragmentActivity

android - 如何在多行中获取 Textinputlayout 提示 android?

c++ - 如何禁用编辑控件对对话框首次启动的关注?

javascript - IE 关注 iframe 位置变化

javascript - 在不添加按键值的情况下,在 Angular 2 中使用按键聚焦文本输入

Android Edit Text错误重叠其他组件

android - 无法在 Android Ndk 中构建本地共享库

android - 在另一个 Activity 中调用 view flipper?