Разрешить кнопку, чтобы дать очки на определенное количество времени в Android - PullRequest
1 голос
/ 25 октября 2011

Я только вижу статьи о том, как сделать что-то через определенное время, но я хочу знать, как сделать что-то за определенное время в Android.

    public void buttonClick(View v) {

        currentUser.changeScore(10);

        TextView tv = (TextView) findViewById(R.id.score);
        tv.setText("Score: " + currentUser.getScore());

    }

Я хочу, чтобы пользователь мог нажимать кнопку и набирать очки в течение 10 секунд после того, как произошло событие. После этих 10 секунд я хочу, чтобы пользователь потерял 10 баллов при нажатии кнопки.

Ответы [ 2 ]

3 голосов
/ 25 октября 2011

Все просто. Каждый раз, когда происходит ваше событие, устанавливайте переменную, например так:

long positivePointEndTime = 0;

// In your event handler...
positivePointEndTime = System.currentTimeMillis() + 10000;

// Then in the button click handler
int scoreChange = System.currentTimeMillis() < positivePointEndTime ? 10 : -10;
currentUser.changeScore(scoreChange);

Не похоже, что вы действительно хотите что-либо регулярно менять в течение этого интервала - событие просто устанавливает новый момент времени в качестве границы, когда "хорошо" нажимать кнопку кнопка. Нет необходимости в таймере или чем-то в этом роде.

(Для тестируемости вам может потребоваться ввести тип Clock с зависимостями или что-то подобное для обеспечения функциональности «текущего времени», но основной принцип тот же.)

0 голосов
/ 25 октября 2011

Вы можете использовать Таймер:

timerIsOn = true; // timerIsOn is boolean variable, must be visible for button click handler
TimerTask task = new TimerTask() {
    @Override
    public void run() {
        timerIsOn = false;
    }
};
Timer timer = new Timer();
timer.schedule(task, 10000);

Тогда обработчик нажатия кнопки будет:

public void buttonClick(View v) {
    if (timerIsOn) {
        currentUser.changeScore(10);
    } else {
        // reduce score
    }
    TextView tv = (TextView) findViewById(R.id.score);
    tv.setText("Score: " + currentUser.getScore());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...