android - Chronometer 节省 fragment 更改时间

标签 android android-fragments timer stopwatch chronometer

所以我的应用有 1 个 Activity 和 4 个 fragment ,其中一个有 Chronometer 来显示经过了多少时间。

它工作正常,但我有一个问题,每次我移动到另一个 fragment 并返回时,计时器总是回到 00:00。

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

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

这是我的 Chronometer 代码,所有代码都在一个 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 类,您将在其中保存开始时间。

    public class ChronometerHelper {

    @Nullable
    private static Long mStartTime;

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

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

关于android - Chronometer 节省 fragment 更改时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52696974/

相关文章:

android - 启用语言后 CMake 错误 : CMAKE_C_COMPILER not set,

android - 通过 Android Universal Image Loader 缓存所有图像

android - fragment/Activity 生命周期和方向变化

使用 Aeris Weather SDK 的 java.lang.ClassNotFoundException : com. hamweather.aeris.maps.R$layout

java - 声音播放之间有延迟吗?

ios - 如何检测 UIScrollView 是否空闲超过 500 毫秒?

android - 如何使用 Drive.API 从 Google Drive 下载文件?

android - 从操作栏选项卡开始 fragment

javascript - 以天、小时、分钟、秒为单位的 Javascript 倒数计时器

java - 如何混合多个PCM音频包(语音流)