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

 我来答
锺芮0G30d3
推荐于2017-12-16 · TA获得超过628个赞
知道小有建树答主
回答量:124
采纳率:0%
帮助的人:158万
展开全部

可以使用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是当前倒计时到多少了
        }
    }
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式