Member 13257642 Ответов: 1

Как записать количество кликов в течение определенного срока


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

Что я уже пробовал:

private TextView t1;
приватная кнопка btn;
private int count = 0;
частная длинный параметр StartTime = система.currentTimeMillis();
private long endTime = System. currentTimeMillis()+20000;

@Ручная коррекция
protected void onCreate(Bundle savedInstanceState) {
super. onCreate(savedInstanceState);
setContentView(R. layout.activity_main);

Т1 = (виджет TextView)findViewById, чтобы найти(ИД Р..виджет TextView);
БТН = (кнопка)findViewById, чтобы найти(ИД Р..кнопка);

while (startTime < endTime)
{
btn. setOnClickListener (новый вид.OnClickListener()
{

@Ручная коррекция
public void onClick (View view)
{
count = count + 1;
}
});
}
t1.setText(Integer. toString(count));
}

1 Ответов

Рейтинг:
0

Richard Deeming

while (startTime < endTime)

Первая проблема: вы сравниваете два фиксированных значения, которые инициализируются один раз, а затем никогда не изменяются.

Вы захотите заменить его startTime с System.currentTimeMillis().

btn.setOnClickListener(new View.OnClickListener() ... 

Вторая проблема: вы никогда не просите код завершить работу. Вместо этого вы добавляете новый обработчик "щелчка" снова и снова в узком цикле.


Простым решением было бы добавить обработчик один раз и проверить ограничение по времени в пределах onClick метод:
private TextView t1;
private Button btn;
private int count = 0;
private long endTime;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    endTime = System.currentTimeMillis() + 20000;
    t1 = (TextView)findViewById(R.id.textView);
    
    btn = (Button)findViewById(R.id.button);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (System.currentTimeMillis() < endTime) {
                count = count + 1;
                t1.setText(Integer.toString(count));
            }
        }
    });
}