Настроить фокус на EditText
У меня есть EditText-Field и установите для него OnFocusChangeListener. Когда он потерял фокус, вызывается метод, который проверяет значение EditText на единицу в базе данных. Если возвращаемое значение метода истинно, отображается тост, и фокус должен снова вернуться к EditText. Фокус должен всегда возвращаться к EditText, и клавиатура должна показывать, пока возвращаемое значение метода не будет ложным.
EDIT: Я думаю, что я еще не сделал свою реальную проблему совершенно ясной: ни один другой элемент на экране не сможет редактировать, пока значение EditText не будет изменено до значения, что делает метод «checkLiganame (liganame) «Return false. Только EditText-поле должно быть доступно для редактирования.
Вот мой код (который не работает для меня):
Этот код приводит к следующему результату: после того, как EditText потерял фокус, фокус переходит в EditText, но я больше не могу редактировать текст.
EDIT2: Изменен мой код. Сценарий:
Я нажимаю на первый EditText и помещаю в него строку, которая уже находится в базе данных. Тост показывает. Теперь я больше не могу редактировать свою строку. Я нажимаю «next» на клавиатуре, и фокус остается на первом EditText. Я пытаюсь редактировать свою строку, но ничего не происходит. Вместо этого моя новая строка отображается во втором EditText. Я нажимаю на стрелку назад своего устройства и отбрасываю на первый и второй EditText -> нет клавиатуры.
Вот мой новый код:
Просто поставьте эту строку на свой onCreate()
Это работает для меня, надеюсь, что это поможет
Запросить фокус недостаточно, чтобы показать клавиатуру.
Чтобы получить фокус и показать клавиатуру, вы должны написать что-то вроде этого:
EDIT: добавление дополнительной информации в ответ после добавления метода checkLiganame.
В методе checkLiganame вы проверяете, является ли курсор нулевым. Курсор всегда возвращает объект, поэтому проверка на null не делает ничего. Однако проблема заключается в строке db.close();
Когда вы закрываете соединение с базой данных, Cursor становится недействительным и, скорее всего, обнуляется.
Закройте базу данных после того, как вы выберете значение.
Вместо того, чтобы проверять курсор на значение null, вы должны проверить, больше ли число возвращаемых строк больше 0: if (cursor.getCount ()> 0), а затем установить значение boolean в true, если это так.
EDIT2: Итак, вот какой код, как заставить его работать. EDIT3: Извините, неправильный код, который я добавил …; S
Во-первых, вам нужно очистить фокус, если другой EditText получает фокус. Это можно сделать с помощью myEditText.clearFocus() . Тогда в вашем onFocusChangeListener вам все равно, если вначале EditText имеет фокус или нет, поэтому onFocusChangeListener может выглядеть примерно так:
Замените первую проверку, if(liganame.length() == 0) с вашей собственной проверкой, тогда она должна работать. Обратите внимание, что все представления EditText должны были установить их onFocusChangeListener тому же слушателю, что и в примере.
Код Darwind не показывал клавиатуру.
Это работает для меня:
В случае, если клавиатура не отображается, попробуйте заставить:
Это изменяет фокус EditText при нажатии кнопки:
Если мы создадим EditText динамически, тогда мы должны установить requestFocus (), как показано ниже.
Если мы уже объявили компонент в представлении xml, мы должны его найти, и мы можем сосредоточиться, как показано ниже.
Он устанавливает фокус только на соответствующий компонент EditText.
Я не знаю, нашел ли вы alredy решение, но для вашей проблемы с редактированием после повторного запроса:
Вы пытались вызвать метод selectAll() или setSelection(0) (если emtpy) на вашем edittext1?
Пожалуйста, дайте мне знать, если это поможет, поэтому я отредактирую свой ответ на полное решение.
Для Xamarin.Android я создал это расширение.
Вы можете сделать это с помощью одной строки:
Источник
Android — обработка событий
События — это полезный способ сбора данных о взаимодействии пользователя с интерактивными компонентами Приложений. Как нажатие кнопок или касание экрана и т. Д. Платформа Android поддерживает очередь событий в порядке «первым пришел — первым вышел» (FIFO). Вы можете зафиксировать эти события в своей программе и предпринять соответствующие действия в соответствии с требованиями.
Существуют следующие три понятия, связанные с управлением событиями в Android:
Прослушиватели событий. Прослушиватель событий — это интерфейс в классе View, содержащий единственный метод обратного вызова. Эти методы будут вызываться платформой Android, когда представление, для которого зарегистрирован прослушиватель, запускается при взаимодействии пользователя с элементом в пользовательском интерфейсе.
Регистрация прослушивателей событий — регистрация событий — это процесс, с помощью которого обработчик событий регистрируется в прослушивателе событий, так что обработчик вызывается, когда прослушиватель событий запускает событие.
Обработчики событий — когда происходит событие, и мы регистрируем прослушиватель события для события, прослушиватель события вызывает обработчики событий, что является методом, который фактически обрабатывает событие.
Прослушиватели событий. Прослушиватель событий — это интерфейс в классе View, содержащий единственный метод обратного вызова. Эти методы будут вызываться платформой Android, когда представление, для которого зарегистрирован прослушиватель, запускается при взаимодействии пользователя с элементом в пользовательском интерфейсе.
Регистрация прослушивателей событий — регистрация событий — это процесс, с помощью которого обработчик событий регистрируется в прослушивателе событий, так что обработчик вызывается, когда прослушиватель событий запускает событие.
Обработчики событий — когда происходит событие, и мы регистрируем прослушиватель события для события, прослушиватель события вызывает обработчики событий, что является методом, который фактически обрабатывает событие.
Слушатели событий и обработчики событий
Обработчик события | Слушатель событий и описание | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
по щелчку() |
шаг | Описание |
---|---|
1 | Вы будете использовать IDE Android studio для создания приложения Android и назовите его myapplication в пакете com.example.myapplication, как описано в главе « Пример Hello World» . |
2 | Измените файл src / MainActivity.java, чтобы добавить прослушиватели и обработчики событий щелчка для двух определенных кнопок. |
3 | Измените содержимое файла res / layout / activity_main.xml, чтобы включить элементы управления пользовательского интерфейса Android. |
4 | Нет необходимости объявлять строковые константы по умолчанию. Android-студия заботится о константах по умолчанию. |
5 | Запустите приложение, чтобы запустить эмулятор Android и проверить результат изменений, внесенных в приложение. |
Ниже приводится содержимое измененного основного файла активности src / com.example.myapplication / MainActivity.java . Этот файл может включать в себя каждый из основных методов жизненного цикла.
Ниже будет содержание файла res / layout / activity_main.xml —
Здесь abc указывает на логотип tutorialspoint
Ниже будет содержимое файла res / values / strings.xml для определения двух новых констант:
Ниже приводится содержимое по умолчанию для AndroidManifest.xml —
Давайте попробуем запустить ваше приложение myapplication . Я предполагаю, что вы создали свой AVD во время настройки среды. Чтобы запустить приложение из Android Studio, откройте один из файлов деятельности вашего проекта и нажмите «Выполнить». значок с панели инструментов. Android Studio устанавливает приложение на AVD и запускает его, и если все в порядке с вашими настройками и приложением, оно отобразится в следующем окне эмулятора —
Теперь вы попытаетесь нажать две кнопки, одну за другой, и вы увидите, что шрифт текста Hello World изменится, что происходит потому, что для каждого события click вызывается метод обработчика зарегистрированного события click.
Упражнение
Я рекомендую попробовать написать разные обработчики событий для разных типов событий и понять точное различие в разных типах событий и их обработку. События, связанные с виджетами menu, spinner, picker, немного отличаются, но они также основаны на тех же принципах, которые описаны выше.
Источник