Я проверил другие вопросы, заданные здесь, и не смог реализовать решения. Мое приложение использует элементы управления, а не рисует на холсте. В основном это подводит итог моей проблемы: -
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn1 = (ToggleButton) findViewById(R.id.btn1);
btn2 = (ToggleButton) findViewById(R.id.btn2);
btn3 = (ToggleButton) findViewById(R.id.btn2);
btn4 = (ToggleButton) findViewById(R.id.btn4);
btn5 = (ToggleButton) findViewById(R.id.btn5);
btn6 = (ToggleButton) findViewById(R.id.btn6);
btn7 = (ToggleButton) findViewById(R.id.btn7);
//blah blah blah
btn1.requestFocus();
wait(100);
btn2.requestFocus();
wait(100);
btn3.requestFocus();
wait(100);
btn3.setChecked(true);
wait(100);
btn4.requestFocus();
wait(100);
btn4.setChecked(true);
wait(100);
btn5.requestFocus();
wait(100);
btn6.requestFocus();
wait(100);
btn6.setChecked(true);
wait(100);
btn7.requestFocus();
wait(100);
//etc
}
Точка, в которой компьютер анимирует перемещение кнопок и их проверку, чтобы пользователь мог видеть, что он делает. Итак, моя проблема в том, что происходит в моем методе wait (), который останавливается на 100 мс, а также обновляет экран и фокус? Любая помощь действительно приветствуется, ура Джонатан.
Решение применимо, спасибо Андрей:)
int timerCounterInterval = 0;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ToggleButton btn1 = (ToggleButton) findViewById(R.id.btn1);
final ToggleButton btn2 = (ToggleButton) findViewById(R.id.btn2);
// more btns
timerCounterInterval = 0; //reset, for each pass of automation
setFocus(btn1);
setFocus(btn2);
setChecked(btn2);
// tidy up
timerCounterInterval++;
new Handler().postDelayed(new Runnable() {
public void run() {
btn2.clearFocus(); //whatever button that had the focus last
}
}, 100*(timerCounterInterval));
// etc - note any code from here will execute *before* the above timer
}
public void setFocus(final ToggleButton btn) {
timerCounterInterval++;
new Handler().postDelayed(new Runnable() {
public void run() {
btn.setFocusableInTouchMode(true); //eww, messy i know
btn.requestFocus();
btn.setFocusableInTouchMode(false);
}
}, 100*timerCounterInterval);
}
public void setChecked(final ToggleButton btn) {
timerCounterInterval++;
new Handler().postDelayed(new Runnable() {
public void run() {
btn.setChecked(true);
}
}, 100*timerCounterInterval);
}
Надеюсь, это поможет другим людям!