第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在啟用 Button 的同時(shí)顯示/開始倒計(jì)時(shí)?

如何在啟用 Button 的同時(shí)顯示/開始倒計(jì)時(shí)?

猛跑小豬 2021-08-13 16:05:49
“如何在啟用 Button 的同時(shí)進(jìn)行 CountDown 顯示?”關(guān)于按鈕的附加信息:按鈕作業(yè)是通過 Textview 中顯示的字符串?dāng)?shù)組單擊 5 次,然后禁用 5 秒鐘以再次執(zhí)行相同的任務(wù)。所以..我想要一個(gè)倒計(jì)時(shí)來(lái)直觀地顯示那些 5 秒(按鈕啟用的時(shí)間)倒計(jì)時(shí)供用戶查看。遺憾的是,我不知道如何將我的 Button 與 CountDown 連接起來(lái),讓它知道它應(yīng)該在啟用 Button 的特定時(shí)間倒計(jì)時(shí)。此外,我希望每次啟用按鈕時(shí)都開始倒計(jì)時(shí)。我查看了https://developer.android.com/reference/android/os/CountDownTimer 但它似乎沒有針對(duì)該特定情況的解決方案。這就是我現(xiàn)在的按鈕代碼:next_button.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            if (currentnumber == list.length) {                currentnumber = 0;            }            if (Curclicks == mod - 1) {                next_button.setEnabled(false);                display.setText(list[currentnumber]);                currentnumber++;                handler.postDelayed(new Runnable() {                    @Override                    public void run() {                        //the button will unlock after the delay specified                        next_button.setEnabled(true);                        Curclicks = 0;                    }                }, delay);            } else {                display.setText(list[currentnumber]);                currentnumber++;            }            Curclicks++;        }    });UI Thread 代碼可以解決嗎?:  private void runThread() {            new Thread() {                public void run() {                    while (delay == 5000) { //delay = 5000 ( 5 secs)                        try {                            runOnUiThread(new Runnable() {                                @Override                                public void run() {                                    timer.setText("" + delay);//timer=TxtView                                }                            });                            Thread.sleep(300);                        } catch (InterruptedException e) {                            e.printStackTrace();                        }                    }                }            }.start();
查看完整描述

3 回答

?
慕的地10843

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超8個(gè)贊

下面是一個(gè)示例,說(shuō)明如何使用 的postDelayed()方法Handler創(chuàng)建倒計(jì)時(shí)。我特意把代碼留得有點(diǎn)冗長(zhǎng),這樣你就可以一步一步地瀏覽它,看看發(fā)生了什么。


創(chuàng)建一些類變量和常量。


private static final long COUNT_DOWN_TICKS = 100l;

private static final long COUNT_DOWN_FINISH = 5000l;

private long countdownElapsed = 0l;

private Handler mCountDownHandler = new Handler();

COUNT_DOWN_FINISH設(shè)置為 5000 --> 5 秒。但可以更改為您需要的任何內(nèi)容。我還使用COUNT_DOWN_TICKSset 為 100 --> 0.1 秒,以防萬(wàn)一您想顯示更精確的倒計(jì)時(shí)。


從您的OnClick()方法中只需調(diào)用startCountDown()即可開始倒計(jì)時(shí)。


private void startCountDown() {

    try {

        countdownElapsed = 0l;

        next_button.setEnabled(false);

        displayCountDown();

        mCountDownHandler.postDelayed(mCountDownRunnable, COUNT_DOWN_TICKS);

    }

    catch (Exception ex){

        Log.e(TAG, ex.getMessage());

    }

}


private Runnable mCountDownRunnable = new Runnable() {

    @Override

    public void run() {

        countdownElapsed = countdownElapsed + COUNT_DOWN_TICKS;


        if(countdownElapsed >= COUNT_DOWN_FINISH){

            releaseCountDownHandler();

            next_button.setEnabled(true);

        }

        else{

            mCountDownHandler.postDelayed(mCountDownRunnable, COUNT_DOWN_TICKS);

        }


        long secFull = countdownElapsed % 1000;

        if(secFull == 0){

            runOnUiThread(new Runnable() {

                @Override

                public void run() {

                    displayCountDown();

                }

            });

        }

    }

};


private void releaseCountDownHandler() {

    try {

        if(mCountDownRunnable != null) {

            mCountDownHandler.removeCallbacks(mCountDownRunnable);

        }

    }

    catch (Exception ex){

        Log.e(TAG, ex.getMessage());

    }

}



private void displayCountDown(){

    long t = (COUNT_DOWN_FINISH - countdownElapsed)/1000;

    String myTime = String.valueOf(t);

    timer.setText(myTime);

}

為了Runnable正確處理,您需要releaseCountDownHandler()從onPause()方法中調(diào)用。這只是一個(gè)短暫的運(yùn)行Thread,但它仍然不應(yīng)該被忽視。


我更喜歡HandlerwithpostDelay()方法而不是Thread.sleep()方法——讓任何線程進(jìn)入睡眠狀態(tài)的事情令人不安。另請(qǐng)注意,習(xí)慣于使用“>=”而不是“==”檢查經(jīng)過時(shí)間條件是個(gè)好主意,具體取決于實(shí)現(xiàn)(例如,您SystemClock.elapsedRealtime()改為使用)條件可能會(huì)錯(cuò)過確切的值!


編輯


在您的Activity類定義下的某處(在本例中,我將稱之為MainActivity)您需要聲明一些變量。由于它們是在類內(nèi)部而不是在方法內(nèi)部定義的,因此它們被稱為“類變量”,并且在定義為“私有”時(shí)具有整個(gè)類的范圍。


public class MainActivity extends AppCompatActivity {


    //class variables

    private static final long COUNT_DOWN_TICKS = 100l;

    private static final long COUNT_DOWN_FINISH = 5000l;

    private long countdownElapsed = 0l;

    private Handler mCountDownHandler = new Handler();

    private Button next_button;

    private TextView timer;



....    


}

您可能已經(jīng)在類onClick()的onCreate()方法中聲明了該方法MainActivity。所以只需添加以下代碼:


next_button.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

    startCountDown();

}

我提供的所有其他方法都是MainActivity類中的方法……而不是任何其他方法中的方法。所以在onCreate()方法下面添加我之前發(fā)布的所有方法。


它看起來(lái)像這樣:


public class MainActivity extends AppCompatActivity {


    private static final String TAG = MainActivity.class.getSimpleName();


    //class variables

    private static final long COUNT_DOWN_TICKS = 100l;

    private static final long COUNT_DOWN_FINISH = 5000l;

    private long countdownElapsed = 0l;

    private Handler mCountDownHandler = new Handler();

    private Button next_button;

    private TextView timer;



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);


        // you must compensate for the actual layout for your activity

        setContentView(R.layout.activity_main);



        // you must compensate for the actual id of the TextView

        timer = findViewById(R.id.tvTimer);


        // you must compensate for the actual id of the Button

        next_button = findViewById(R.id.btnNext);

        next_button.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                startCountDown();

            }

        });

    }


    private void startCountDown() {

        try {

            countdownElapsed = 0l;

            next_button.setEnabled(false);

            displayCountDown();

            mCountDownHandler.postDelayed(mCountDownRunnable, COUNT_DOWN_TICKS);

        }

        catch (Exception ex){

            Log.e(TAG, ex.getMessage());

        }

    }


    private Runnable mCountDownRunnable = new Runnable() {

        @Override

        public void run() {

            countdownElapsed = countdownElapsed + COUNT_DOWN_TICKS;


            if(countdownElapsed >= COUNT_DOWN_FINISH){

                releaseCountDownHandler();

                next_button.setEnabled(true);

            }

            else{

                mCountDownHandler.postDelayed(mCountDownRunnable, COUNT_DOWN_TICKS);

            }


            long secFull = countdownElapsed % 1000;

            if(secFull == 0){

                runOnUiThread(new Runnable() {

                    @Override

                    public void run() {

                        displayCountDown();

                    }

                });

            }

        }

    };


    private void releaseCountDownHandler() {

        try {

            if(mCountDownRunnable != null) {

                mCountDownHandler.removeCallbacks(mCountDownRunnable);

            }

        }

        catch (Exception ex){

            Log.e(TAG, ex.getMessage());

        }

    }



    private void displayCountDown(){

        long t = (COUNT_DOWN_FINISH - countdownElapsed)/1000;

        String myTime = String.valueOf(t);

        timer.setText(myTime); 

    }   


}


查看完整回答
反對(duì) 回復(fù) 2021-08-13
?
繁星淼淼

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超11個(gè)贊

這段代碼就像我上面的代碼,除了這段代碼引入了一個(gè)“點(diǎn)擊計(jì)數(shù)器”。我引入了一個(gè)新的類變量來(lái)跟蹤按鈕被點(diǎn)擊的次數(shù)。我還引入了一個(gè)名為“NUMBER_OF_BUTTON_CLICKS”的新常量,它作為點(diǎn)擊次數(shù)的上限。


用戶現(xiàn)在可以點(diǎn)擊按鈕(在本例中)5 次。第 5 次單擊時(shí),滿足觸發(fā)startCountDown方法的條件并且按鈕被禁用 5 秒。


public class MainActivity extends AppCompatActivity {

    //Constant values    

    private static final String TAG = MainActivity.class.getSimpleName();

    private static final int NUMBER_OF_BUTTON_CLICKS = 5;

    private static final long COUNT_DOWN_TICKS = 100l;

    private static final long COUNT_DOWN_FINISH = 5000l;


    //class variables

    private int howManyClicks = 0;

    private long countdownElapsed = 0l;

    private Handler mCountDownHandler = new Handler();

    private Button next_button;

    private TextView timer;

    private TextView clicks;



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);


        // you must compensate for the actual layout for your activity

        setContentView(R.layout.activity_main);



        // you must compensate for the actual id of the TextView

        timer = findViewById(R.id.tvTimer);


        // Use this only if you want to display the number of clicks 

        // you might need to add this TextView if you want to display the number of clicks

        clicks = findViewById(R.id.tvClicks);


        // you must compensate for the actual id of the Button

        next_button = findViewById(R.id.btnNext);

        next_button.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                howManyClicks++;

                if(howManyClicks >= NUMBER_OF_BUTTON_CLICKS){

                    startCountDown();

                }


                //Add this only if you want to see how many clicks were made

                String myClicks = String.valueOf(howManyClicks);

                clicks.setText(myClicks)

            }

        });

    }


    private void startCountDown() {

        try {

            countdownElapsed = 0l;

            next_button.setEnabled(false);

            displayCountDown();

            mCountDownHandler.postDelayed(mCountDownRunnable, COUNT_DOWN_TICKS);

        }

        catch (Exception ex){

            Log.e(TAG, ex.getMessage());

        }

    }


    private Runnable mCountDownRunnable = new Runnable() {

        @Override

        public void run() {

            countdownElapsed = countdownElapsed + COUNT_DOWN_TICKS;


            if(countdownElapsed >= COUNT_DOWN_FINISH){

                releaseCountDownHandler();

                next_button.setEnabled(true);

                // reset the clicks counter

                howManyClicks = 0;

            }

            else{

                mCountDownHandler.postDelayed(mCountDownRunnable, COUNT_DOWN_TICKS);

            }


            long secFull = countdownElapsed % 1000;

            if(secFull == 0){

                runOnUiThread(new Runnable() {

                    @Override

                    public void run() {

                        displayCountDown();

                    }

                });

            }

        }

    };


    private void releaseCountDownHandler() {

        try {

            if(mCountDownRunnable != null) {

                mCountDownHandler.removeCallbacks(mCountDownRunnable);

            }

        }

        catch (Exception ex){

            Log.e(TAG, ex.getMessage());

        }

    }



    private void displayCountDown(){

        long t = (COUNT_DOWN_FINISH - countdownElapsed)/1000;

        String myTime = String.valueOf(t);

        timer.setText(myTime);


        //Add this only if you want to see how many clicks were made

        String myClicks = String.valueOf(howManyClicks);

        clicks.setText(myClicks)

    }   


}


查看完整回答
反對(duì) 回復(fù) 2021-08-13
  • 3 回答
  • 0 關(guān)注
  • 303 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)