在启动 ProgressDialog 之前隐藏键盘

Hiding keyboard prior to initiating ProgressDialog

我有一个键盘,在启动我的下一个功能之前我绝对需要它消失。我确定的是 ProgressDialog 妨碍了。我拔掉了线,它工作正常。为什么 ProgressDialog 不能显示 当且仅当 键盘已经收起?好像有自己的想法。

public void hideKeyboard(){
    View view = this.getActivity().getCurrentFocus();
    if (view != null){
        InputMethodManager imm = (InputMethodManager)((this.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)));
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);

    }

    ShowProgressDialog(getResources().getString(R.string.saving_design));
    new SaveTemplateTask().execute();
}

更新: 好像是这个逻辑,但是还是不行。 ProgressDialog 根本不等待 hideKeyboard 被验证为真与否。

我将 hideKeyboard return 设置为布尔值。

public boolean hideKeyboard() {
    View view = this.getActivity().getCurrentFocus();
    if (view != null) {
        InputMethodManager imm = (InputMethodManager) ((this.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)));
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }
    return true;
}

然后在一个单独的函数中:

    if (hideKeyboard()) {
        ShowProgressDialog(getResources().getString(R.string.saving_design));
        new SaveTemplateTask().execute();
    }
public static void hideKeyboard(Context ctx) {
        InputMethodManager inputManager = (InputMethodManager) ctx
                .getSystemService(Context.INPUT_METHOD_SERVICE);

        // check if no view has focus:
        View v = ((Activity) ctx).getCurrentFocus();
        if (v == null)
            return;

        inputManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
    }

根据您的要求隐藏密钥board.Use下面的代码非常简单

getActivity().getWindow().setSoftInputMode(
            WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

我放弃并改用 Toasts(一个在我的 onCreate 中,一个在我的新 SaveTemplateTask 的 onPostExecute 方法中...因为 ProgressDialog 倾向于在 before 键盘是隐藏(这不是我们想要的)。老实说,这看起来更好,所以我可以接受,但很想知道为什么我上面最初的问题中描述的过程似乎没有 运行 这么顺利。

hideKeyboard();

if (hideKeyboard()) {
     ShowProgressDialog(getResources().getString(R.string.saving_design));
     Toast.makeText(getActivity().getApplicationContext(), "Saving design", Toast.LENGTH_LONG).show();
     new SaveTemplateTask().execute();
}

第二个函数:

public boolean hideKeyboard() {
    View view = this.getActivity().getCurrentFocus();
    if (view != null) {
        InputMethodManager imm = (InputMethodManager) ((this.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)));
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
        return true;
    }
    return false;
}