У меня есть клавиатура, которая мне абсолютно необходима, чтобы она исчезла перед запуском следующих функций. Я определил, что 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 возвращать логическое значение.

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();
    }
1
Martin Erlic 30 Дек 2015 в 06:58

3 ответа

Лучший ответ

Я отказался и вместо этого использовал тосты (один в моем onCreate и on в методе onPostExecute моего нового SaveTemplateTask ... потому что ProgressDialog имеет тенденцию инициировать до , когда клавиатура скрыта (что не то, что мы хотим Честно говоря, в любом случае это выглядело лучше, так что я в порядке с полицейским, но было бы интересно узнать, почему процесс, описанный в моем первоначальном вопросе выше, кажется, не проходит так гладко.

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;
}
0
Martin Erlic 30 Дек 2015 в 08:33
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);
    }
0
Lakhwinder Singh 30 Дек 2015 в 04:07

Скрыть клавиатуру очень просто. Используйте приведенный ниже код в соответствии с вашими требованиями.

getActivity().getWindow().setSoftInputMode(
            WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
0
ManiTeja 30 Дек 2015 в 04:42