android 从第一个页面跳转到第二个页面之后 在第二个页面的按钮上开始一个倒计时 要怎么实现

如题所述

可以使用Handler来做


比如下面的代码片段,开始一个30秒的倒计时

在Application.onCreate()里TestMain.getInstance().setContext(this);

或则在你的第二个页面onCreate()里TestMain.getInstance().setContext(this);


之后启动倒计时并刷新页面

TestMain.getInstance().startCountdownTask(new CountdownTask("taskid1", 30));

public class TestMain {

    //用于保存倒计时任务已经完成的计数
    private SharedPreferences mCountdownPrefs;
    private Handler mCountdownHandler;

    public static final TestMain INSTANCE = new TestMain();
    private TestMain() {}

    public static TestMain getInstance() {
        return INSTANCE;
    }

    //在主线程里调用,比如Application.onCreate()中TestMain.getInstance().setContext(this);
    public void setContext(Context context) {
        mCountdownPrefs = context.getSharedPreferences("countdwon", Context.MODE_PRIVATE);
        mCountdownHandler = new Handler();

    }


    //在需要倒计时任务的时候调用
    public void startCountdownTask(final CountdownTask countdownTask) {
        //如果有未完成的倒计时任务,读取上次倒计时到几了, 否则就是设置的count次
        int count = mCountdownPrefs.getInt(countdownTask.taskId, countdownTask.count);
        countdownTask.count = count;
        //首先执行一次
        countdownTask.notify(countdownTask.count);
        //之后每一秒执行一次
        mCountdownHandler.postDelayed(new Runnable() {
            @Override
            public void run() {
                //1秒执行一次
                if (countdownTask.countDown()) {
                    mCountdownHandler.postDelayed(this, 1000);
                } else {
                    //倒计时结束
                    mCountdownHandler.removeCallbacks(this);
                    //移除任务
                    mCountdownPrefs.edit().remove((countdownTask.taskId)).commit();
                }
            }
        }, 1000);

    }

    public static class CountdownTask {
        /**倒计时起始值*/
        private int count = 30;
        /**倒计时任务id*/
        private String taskId = "";

        public CountdownTask(int count, String taskId) {
            this.count = count;
            this.taskId = taskId;
        }

        private boolean countDown() {
            count--;
            boolean isContinue = count>=0;
            notify(Math.max(count, 0));
            return isContinue;
        }

        //通知更新
        public void notify(int current) {
            //UI更新倒计时数字,current是当前倒计时到多少了
        }
    }
}

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网