天文钟节省碎片更换的时间 [英] Chronometer save time on fragment change

查看:152
本文介绍了天文钟节省碎片更换的时间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我的应用程序有1个活动和4个片段,其中一个片段带有计时器,以显示经过了多少时间.

So my app has 1 activity and 4 fragments and one of them has Chronometer to show how much time is passed.

它工作正常,但是我有一个问题,就是每次我移到另一个片段并返回时,天文钟都会一直回到00:00.

It works fine, but I have one issue that the chronometer keeps going back to 00:00 every time I move to another fragment and come back.

我知道这是因为我的startStopWatch()方法位于OnCreateView中,但是有什么方法可以使它从停止的地方继续吗?

I know it is because my startStopWatch() method is in OnCreateView, but is there any way to make it continue from where it stopped?

是否可以使用Bundle类解决此问题?如果可以,怎么办?

Is it possible to use Bundle class to solve this? If so, how?

这是我的Chronometer代码,所有代码都在一个片段中:

Here is my code for Chronometer, all are in one fragment:

public class FirstFragment extends Fragment {
    Chrhonometer chronometer;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        final View view = inflater.inflate(R.layout.fragment_memo, container, false);
        chronometer = view.findViewById(R.id.stop_watch);
        chronometer.setFormat("%s");
        chronometer.setBase(SystemClock.elapsedRealtime());
        startStopWatch();
    }
}

和方法:

private void startStopWatch() {

    if (chronometer.getBase() != 0) {

        chronometer.setBase(SystemClock.elapsedRealtime());

    } else {

        chronometer.setBase(chronometer.getBase() + SystemClock.elapsedRealtime());

    }

    chronometer.start();

}

private void stopStopWatch() {

    chronometer.setBase(SystemClock.elapsedRealtime());
    chronometer.stop();

}

谢谢.

推荐答案

尝试此方法

    public class FirstFragment extends Fragment {
            Chrhonometer chronometer;
            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                     Bundle savedInstanceState) {
                final View view = inflater.inflate(R.layout.fragment_memo, container, false);
                chronometer = view.findViewById(R.id.stop_watch);
        ChronometerHelper chronometerHelper = new ChronometerHelper();
                startStopWatch();
            }

        private void startStopWatch() {
         if (chronometerHelper.getStartTime() == null) {
                    // If the start date is not defined, set it.
                    long startTime = SystemClock.elapsedRealtime();
                    chronometerHelper.setStartTime(startTime);
                    chronometer.setBase(startTime);
                } else {
                    // Otherwise set the chronometer's base to the original
                    // starting time.
                    chronometer.setBase(chronometerHelper.getStartTime());

                }

                chronometer.start();

        }

private void stopStopWatch() {

    long startTime = SystemClock.elapsedRealtime();
    chronometerHelper.setStartTime(startTime);
    chronometer.setBase(startTime);
    chronometer.stop();

}

        }

创建一个ChronometerHelper类,您将在其中节省开始时间.

Create a class ChronometerHelper , in which you will save the starting time.

    public class ChronometerHelper {

    @Nullable
    private static Long mStartTime;

    @Nullable
    public Long getStartTime() {
        return mStartTime;
    }

    public void setStartTime(final long startTime) {
        this.mStartTime = startTime;
    }
}

这篇关于天文钟节省碎片更换的时间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆