ожидание ввода с клавиатуры - PullRequest
0 голосов
/ 07 мая 2011

Я пишу приложение с использованием Android 2.1 В какой-то момент я вызываю setOnKeyListener В частности, я пишу ...

  editfield=(EditText)findViewById(R.id.edittext);
  editfield.setOnKeyListener(this); 

Это в основном потоке, в обратном вызове onCreate. На этом этапе кода я бы хотел, чтобы обработка остановилась и ожидала ввод с клавиатуры. Если я позволю запустить код, логика скоро сломается.

Полагаю, я мог бы поставить машину в цикл ожидания, пока нажатие клавиши не вызовет метод onClick. Я также мог бы создать цикл ожидания в точке, где требовался ввод от пользователя. Но я не чувствую себя комфортно ни с одним из этих решений. (Связанная проблема заключается в том, что в определенный момент кода экран должен светиться. Должен ли я проверить это, прежде чем переходить дальше этой точки?

Возможно, я не очень разбираюсь в документации, но я не смог найти ничего конкретного, отвечающего на эти вопросы.

Может ли кто-нибудь объяснить мне, как добиться необходимого мне времени и, более того, где я могу найти информацию по этим вопросам?

Заранее спасибо.

- в DC

1 Ответ

2 голосов
/ 07 мая 2011

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

Если вы заблокировали / ждали - тогда что будетпроизойдет, если пользователь нажал клавишу «Домой» (вы не можете это перехватить) или перешел к другому приложению - ваше приложение принудительно закроется, потому что оно все еще будет ждать, а ваши onPause и т. д. не будут выполняться.

Myбыло бы предложено:

  1. Поместить весь код, который должен появиться после щелчка, в некоторую функцию
  2. Поместить слушатель в конец onCreate, таким образом больше не будет кодавыполняется после установки прослушивателя
  3. Когда вы получаете нажатие клавиши, вызовите вашу функцию.Таким образом, операторы в вашей функции будут выполняться только после нажатия клавиши

Если, однако, это для игры, то допустимо иметь поток, посвященный касанию / клавише- события, которые спят в течение 50 с или около того, чтобы избежать перегрузки события (но это не должно быть основным потоком пользовательского интерфейса!)

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