Любой безболезненный способ вызвать программную клавиатуру для EditText в диалогах? - PullRequest
4 голосов
/ 18 ноября 2009

Я отображаю EditText как один элемент стиля списка AlertDialog (который поддерживается реализацией ListView по умолчанию). Я как бы ожидал, что это обстоятельство не изменит поведение EditText, но это так: щелчок по EditText больше не вызывает программную клавиатуру.

После часа возни с настройками фокуса и обработчиками щелчков я сыт по горло и отлажен в InputMethodManager.showSoftInput(), и нашел это:

    public boolean showSoftInput(View view, int flags,
        ResultReceiver resultReceiver) {
        ...
        if (mServedView != view && (mServedView == null
                || !mServedView.checkInputConnectionProxy(view))) {
            return false;
        }
        ...
    }
}

Проблема здесь в том, что mServedView - это ListView, который поддерживает диалог, в то время как view - это EditText, а ListView.checkInputConnectionProxy() делает просто return false в реализации ListView по умолчанию (для переопределения подклассами).

Хуже того, я не смог найти способ установить пользовательский ListView, который бы позволял передавать запросы IME; AlertDialog.Builder.setView() принимает пользовательский ListView, но это не ListView, который видит InputMethodManager.

Есть предложения, как решить эту проблему?

Ответы [ 2 ]

1 голос
/ 02 февраля 2010

Вы пробовали что-то подобное, извините, если у вас есть

getBaseContext().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
0 голосов
/ 18 ноября 2009

позвольте мне предварять это большим жирным шрифтом. Я ничего не знаю об Android-SDK.

При этом я бы предложил: написать запрос Сделайте так, чтобы ваш EditText выдал requestKeyboard. Таким образом, ListView может обрабатывать бросаемый объект, генерировать клавиатуру, а затем возвращать ввод для редактирования текста. Таким образом, mServedView == view

Я думаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...