在activity状态onStop时关闭/隐藏Android软键盘

9
我在布局中有一个EditText和一个Button。在编辑字段中输入后,单击此按钮以返回我的片段,我想隐藏虚拟键盘。我认为这很简单,但我尝试了一些方法,它们都没有起作用:
这段代码展示了Button的工作原理:
private void onButtonClicked(){
    getActivity().getSupportFragmentManager().popBackStack();
}

那段代码可以解决一些问题,但并不能解决当前的问题。我使用了hideSoftInputFromWindow,但是当我调用'EditText.getWindowToken()'时,它并没有隐藏软键盘(我也尝试将参数0替换为InputMethodManager.HIDE_IMPLICIT_ONLY 或 InputMethodManager.HIDE_NOT_ALWAYS,但都不起作用):

EditText myEditText = (EditText) findViewById(R.id.myEditText);  
InputMethodManager imm = (InputMethodManager)getSystemService(
      Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);

这段代码在此应用程序的另一个屏幕中工作。这个屏幕是一个活动,因此我认为问题是片段的问题。

我的片段代码:

public class ChangeEmailFragment extends BaseFragment {
    private TextView mTxtCurrentEmail;
    private EditText mEdtNewEmail;
    private EditText mEdtPassword;
    private TextView mTxtSubmit;

    @Override
    public void onStop() {
        super.onStop();
        if (progressDialog != null && progressDialog.isShowing())
            progressDialog.dismiss();
        if (dialog != null && dialog.isShowing())
            dialog.dismiss();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_change_email, container,
                false);
        mTxtCurrentEmail = (TextView) view.findViewById(R.id.current_email);
        mEdtNewEmail = (EditText) view.findViewById(R.id.edit_email);
        mEdtPassword = (EditText) view.findViewById(R.id.edit_password);
        mTxtSubmit = (TextView) view.findViewById(R.id.button_submmit);
        return view;
    }

    private void showErrorDialog(String msg) {
        Builder builder = new Builder(getActivity());
        builder.setTitle(getString(R.string.fg_change_email_dialog_error_title));
        builder.setMessage(msg);
        builder.setNegativeButton(getText(R.string.common_ok), null);
        dialog = builder.create();
        dialog.show();
    }
}

我的活动代码:

@Override
    public void onStop() {
        super.onStop();
        InputMethodManager imm = (InputMethodManager) getSystemService(
              Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(mEdtUserName.getWindowToken(), 0);
    }

发布你的 Fragment 代码 - M D
这是我的片段代码
public static ChangeEmailFragment newInstance() { ChangeEmailFragment changeEmailFragment = new ChangeEmailFragment(); return changeEmailFragment; }
- Trần Đức Tâm
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_change_email, container, false); mTxtCurrentEmail = (TextView) view.findViewById(R.id.current_email); mEdtNewEmail = (EditText) view.findViewById(R.id.edit_email); mEdtPassword = (EditText) view.findViewById(R.id.edit_password); mTxtSubmit = (TextView) view.findViewById(R.id.button_submmit); return view; } - Trần Đức Tâm
@NWD请在您的问题中发布所有代码。这是什么? - M D
我使用了建议的 code,但是我无法发布我的格式化代码。所以,请教我如何做。非常感谢。 - Trần Đức Tâm
1个回答

7

Fragment中尝试以下方法:

 InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
 imm.hideSoftInputFromWindow(getView().getWindowToken(), 0);

這對我來說適用。謝謝!所以我明白,當我的光標位於片段時,我必須在片段中調用hideSoftInputFromWindow而不是活動。是這樣嗎? - Trần Đức Tâm
@Nin_in_the_winD 是的,完全正确。 - M D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接