Клавиатура не отображается в AlertDialog - PullRequest
2 голосов
/ 11 сентября 2011

Итак, у меня есть пункт меню, который показывает AlertDialog с EditText в нем, проблема в том, что, хотя она сфокусирована, клавиатура не отображается, пока я не нажму на текст редактирования, у кого-нибудь есть решение?Я пытался

InputMethodManager imm = (InputMethodManager)
                         getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT);

, но это не работает.Вот мой код

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    return (applyMenuChoice(item) || super.onOptionsItemSelected(item));
}

private boolean applyMenuChoice(MenuItem item) {
    switch (item.getItemId()) {
    case SEARCH:
        final AlertDialog.Builder alert = new AlertDialog.Builder(this);
        final EditText input = new EditText(this);
        input.setMinimumWidth(300);
        input.setInputType(InputType.TYPE_CLASS_NUMBER);
        alert.setView(input);
        alert.setPositiveButton("Ok",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,
                            int whichButton) {
                        String value = input.getText().toString().trim();
                        Toast.makeText(getApplicationContext(), value,
                                Toast.LENGTH_SHORT).show();
                    }
                });

        alert.show();       
        return (true);
    case DELETE:
        getListView().setAdapter(null);
        return (true);
    }
    return (false);
}

Ответы [ 2 ]

4 голосов
/ 11 сентября 2011

Попробуйте этот код,

ОТКРЫТЬ

                 ettext.requestFocus();
                ettext.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        InputMethodManager keyboard = (InputMethodManager)
                        getSystemService(Context.INPUT_METHOD_SERVICE);
                        keyboard.showSoftInput(ettext, 0);
                    }
                },200);
2 голосов
/ 02 июня 2015

у меня ниже решение работает

Просто прокомментируйте alert.show(); в свой код и вставьте следующий код

AlertDialog alertDlg = alert.create();

alertDlg.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);

alertDlg.show();

Жестко запрограммированные задержки никогда не рекомендуются, поскольку они могут вызвать непредсказуемое поведение при различных условиях / на разных устройствах .

...