亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何分別在兩個for循環中使用postDelayed或sleep兩次

如何分別在兩個for循環中使用postDelayed或sleep兩次

蕭十郎 2022-07-20 16:09:31
我想數 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 秒倒計時。然后啟動 Toast Message。而且 Toast 消息也需要每 3 秒敬酒一次。
查看完整描述

1 回答

?
慕田峪9158850

TA貢獻1794條經驗 獲得超7個贊

試試這個代碼。這給出了相當準確的結果。有時會有一些滯后,但不會明顯。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


查看完整回答
反對 回復 2022-07-20
  • 1 回答
  • 0 關注
  • 94 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號