Chronometer 节省片段更改时间
Chronometer save time on fragment change
所以我的应用程序有 1 个 activity 和 4 个片段,其中一个有 Chronometer 来显示经过了多少时间。
它工作正常,但我有一个问题,每次我移动到另一个片段并返回时,计时器总是回到 00:00。
我知道这是因为我的 startStopWatch() 方法在 OnCreateView 中,但是有什么办法让它从停止的地方继续吗?
是否可以使用 Bundle class 来解决这个问题?如果可以,怎么做?
这是我的 Chronometer 代码,所有代码都在一个片段中:
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();
}
}
创建一个 class ChronometerHelper ,您将在其中保存开始时间。
public class ChronometerHelper {
@Nullable
private static Long mStartTime;
@Nullable
public Long getStartTime() {
return mStartTime;
}
public void setStartTime(final long startTime) {
this.mStartTime = startTime;
}
}
所以我的应用程序有 1 个 activity 和 4 个片段,其中一个有 Chronometer 来显示经过了多少时间。
它工作正常,但我有一个问题,每次我移动到另一个片段并返回时,计时器总是回到 00:00。
我知道这是因为我的 startStopWatch() 方法在 OnCreateView 中,但是有什么办法让它从停止的地方继续吗?
是否可以使用 Bundle class 来解决这个问题?如果可以,怎么做?
这是我的 Chronometer 代码,所有代码都在一个片段中:
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();
}
}
创建一个 class ChronometerHelper ,您将在其中保存开始时间。
public class ChronometerHelper {
@Nullable
private static Long mStartTime;
@Nullable
public Long getStartTime() {
return mStartTime;
}
public void setStartTime(final long startTime) {
this.mStartTime = startTime;
}
}