Подпрограммы обратного вызова Activity ждут последнего прослушивателя событий ...
Может ли это быть простым решением ??
Этот вопрос «Ждать ввода пользователя» - это вопрос, который регулярно возникает, меня также озадачивает, и я еще не видел, что мне кажется реальным чистым решением.
Недавно у меня возникла идея, но я довольно зелен в игре для Android и хочу посмотреть, как она выдерживает проверку.
Техника основана на идее, что подпрограммы обратного вызова активности не завершаются, пока есть прослушиватель событий, который продолжает прослушивать. В результате подпрограмма обратного вызова выполняет последний оператор, а затем ничего не делает, но не завершается. (IOW, «вы можете проверить в любое время, когда захотите, но вы никогда не сможете уйти… пока слушатели событий не позволят вам». Юк.)
Это, кажется, соответствует требованиям. Пользовательский интерфейс не заморожен и нет бесконечного цикла. Единственное требование к пользовательскому интерфейсу - поддерживать список событий. Когда пользователь вводит ввод, процедура обратного вызова события, то есть onKey, обрабатывает ввод, а затем выполняет ВСЕ ШАГИ, ТРЕБУЕМЫЕ ПЕРЕД СЛЕДУЮЩИМ пользователем. Затем процедура обратного вызова события устанавливает нового слушателя и возвращает его, освобождая старого слушателя и оставляя пользовательский интерфейс с одной задачей - поддерживать нового слушателя. Это продолжается итеративно до тех пор, пока не будет завершена процедура обратного вызова активности.
Вот код, который я тестировал:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void onStart() {
super.onStart();
final EditText et = (EditText) findViewById(R.id.edittext);
et.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
boolean tf = checKey(keyCode, event);
if(tf==false)return false;
gotPW();
return true;
}
});
}
gotPW(){
...do ALL the stuff you want to do before you need more user input
...set ANOTHER event listener that is connected to another
event callback method
...return, releasing the first event listener, and putting the onStart
routine back in its same state -- nothing to do except to attend to
an event listener.
}
//this checks to see if the enter key has been hit
public boolean checKey(int keyCode, KeyEvent event){
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER))
{
return true;
}
return false;
}
Вышеупомянутый код, кажется, делает то, что требуется ... onStart ждал моего ввода.
Это хорошая техника?
Есть ли проблемы, которые я не выявил?
Все это делали все время,
и только новички вроде меня думают, что они к чему-то относятся?