>

5 초를 세어 기능을 시작하고 싶습니다. 이 함수는 3 초마다 호출해야합니다.

Toast.makeText(this, "Countdown 5", Toast.LENGTH_SHORT).show();
Handler handler = new Handler();
for (int i = 5; i >= 0; --i) {
    final int idx = i;
    handler.postDelayed(() -> {
        Toast.makeText(MyActivity.this, "Countdown " + (idx - 1), Toast.LENGTH_SHORT).show();
        if (idx == 0) {
            int messageSize = messageItems.size();
            for (int j = 0; j < messageSize; j++) {
                final int jdx = j;
                Handler handler1 = new Handler();
                handler1.postDelayed(() -> {
                    Toast.makeText(MyActivity.this, messageItems.get(jdx), Toast.LENGTH_SHORT).show();
                }, 3000 * jdx);
            }
        }
    }, 1000 * (5-idx));
}

내부 루프 부분은 외부 루프없이 잘 작동합니다.

       int messageSize = messageItems.size();
        for (int j = 0; j < messageSize; j++) {
            final int jdx = j;
            Handler handler1 = new Handler();
            handler1.postDelayed(() -> {
                Toast.makeText(MyActivity.this, messageItems.get(jdx), Toast.LENGTH_SHORT).show();
            }, 3000 * jdx);
        }

5 초 카운트 다운과 같은 기능을 추가하고 싶습니다. 그런 다음 토스트 메시지를 시작하십시오. 토스트 메시지도 3 초마다 토스트해야합니다.


  • 답변 # 1

    이 코드를 사용해보십시오. 이것은 상당히 정확한 결과를 제공합니다. 때때로 약간의 지연이 있지만 눈에 띄지 않을 것입니다. 토스트를 보여 주려면 이것을 Tweek하십시오.

       int counter = 5;
        Handler handler = new Handler();
        ArrayList<String> messageItems = new ArrayList<>();
        messageItems.add("Message 1");
        messageItems.add("Message 2");
        messageItems.add("Message 3");
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                counter--;
                if (counter > 0) {
                    Log.d("HOME", "onCreate: countdown " + counter + " " + System.currentTimeMillis());
                    handler.postDelayed(this, 1000);
                }
                if (counter == 1) {
                    for (int j = 0; j < messageItems.size(); j++) {
                        final int jdx = j;
                        Handler handler1 = new Handler();
                        handler1.postDelayed(() -> {
                            Log.d("HOME", "onCreate: countdown " + messageItems.get(jdx) + " " + System.currentTimeMillis());
                        }, 3000 * jdx);
                    }
                }
            }
        };
        Log.d("HOME", "onCreate: countdown 5 " + System.currentTimeMillis());
        handler.postDelayed(runnable, 1000);
    
    

    다음은 타이밍의 출력입니다-

    Countdown 5 1551720212370
    +1004
    Countdown 4 1551720213374
    +1019
    Countdown 3 1551720214393
    +1013
    Countdown 2 1551720215406
    +1568
    Countdown 1 1551720216974
    +413
    Message 1 1551720217387
    +2589
    Message 2 1551720219976
    +2999
    Message 3 1551720222975
    
    

  • 이전 React Native에서 ErrorUtils를 가져 오는 방법
  • 다음 c# - XamDataGrid에서 필터링되지 않은 모든 행을 어떻게 반복합니까?