#java #android #for-loop #countdown #countdowntimer
#java #Android #для цикла #обратный отсчет #таймер обратного отсчета
Вопрос:
Я пытаюсь научиться программированию. Итак, я решил сделать небольшой проект, но я застрял.
Я пытаюсь создать таймер обратного отсчета. У меня есть 3 разных времени. Например, первый — 10 секунд, второй — 5 секунд, а третий — 7 секунд. Итак, я хочу создать приложение, которое начнет отсчет с 10 секунд, а когда оно завершит, начнет отсчет со второго таймера, а затем с третьего.
public class MainActivity extends AppCompatActivity {
private Button mStartButton;
private Button mResetButton;
private Button mStopButton;
private TextView mTextViewCountDown;
private TextView mTextViewCounter;
private CountDownTimer mCountDownTimer;
private int countme = 0 ;
private int [] array = new int[3];
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mStartButton = findViewById(R.id.button_start);
mStopButton = findViewById(R.id.button_stop);
mResetButton = findViewById(R.id.button_reset);
mTextViewCountDown = findViewById(R.id.text_view_countdown);
mTextViewCounter = findViewById(R.id.text_s);
array[0]=10000;
array[1]=5000;
array[2]=70000;
mStartButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for(int i = 0; i<3; i ){
mCountDownTimer = new CountDownTimer(array[i], 1000) {
@Override
public void onTick(long millisUntilFinished) {
mTextViewCountDown.setText("" millisUntilFinished/1000);
}
@Override
public void onFinish() {
countme ;
if(countme / 3 == 3){
mCountDownTimer.cancel();
}else{
start();
} } }.start();
}
}
}); } }
Я не думаю, что цикл for подходит для моей проблемы. Это не увеличивает переменную i один раз, я думаю, она увеличивается с каждым нажатием. Как новичок, я не мог понять, что мне делать.
Комментарии:
1. Если вы пытаетесь запустить countdowntimer один за другим одним нажатием кнопки, почему бы вам не использовать 10 5 7 (т.е. 22 секунды) и условие в
onTick
2. может быть, вы можете использовать
Thread.sleep(array[i]);
для ожидания цикла до тех пор, пока значение в массиве3. Потому что я не хочу, чтобы пользователь видел общее время на экране. Время для каждого пользователя. Есть задачи, которые выполняются в ограниченное время. Первый парень запускается, и когда его время истекает, он переключается на 2. парень, а затем на 3. парень. Таким образом, каждый должен видеть свое ограниченное время на экране, а не общее время.
Ответ №1:
Вам не нужно для цикла попробовать что-то вроде этого:
private void startCountDowntimer(long millis, int count) {
count ;
int finalCount = count;
new CountDownTimer(millis, 1000) {
@Override
public void onTick(long millisUntilFinished) {
mTextViewCountDown.setText("" millisUntilFinished/1000);
}
@Override
public void onFinish() {
if (finalCount == 1) {
startCountDowntimer(5000, 1);
} else if (finalCount == 2) {
startCountDowntimer(7000, 2);
} else {
//all finished
}
}
}.start();
}
и на кнопке нажмите:
mStartButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startCountDowntimer(10000, 0);
}
});
Комментарии:
1. По какой-то причине он не считается точно. Только первый раз является правильным. Второй идет как 5 3 2 1 0, а третий — 7 5 4 2 1 0