【问题标题】:i am facing issue in chronometer if i pause chronometer it not starting where it is stopped如果我暂停计时器,我会在计时器中遇到问题,它不会从停止的地方开始
【发布时间】:2019-09-04 22:05:19
【问题描述】:

如果我暂停chronometer,我将面临chronometer 的问题,它不会从停止的地方开始。所以我需要从它停止的地方开始。在onlocation 更改方法中,如果米小于 5 米,时间将开始,如果大于 5 米,时间将停止,但它不会从停止的地方开始

public class MainActivity{

@Override
public void onLocationChanged(@NonNull Location location) {

        if (mPresenter.getLocalSTATUS() != null && mPresenter.getLocalSTATUS().equalsIgnoreCase(LOCAL_CONTINUE_RIDE))
                    {
                        if(mPresenter.getLocalSTATUS().equalsIgnoreCase(LOCAL_CONTINUE_RIDE))
                        {

                            if (results[0] < 5.09) {
                                cmTimer.start();

                            }
                            else {
                                pauseOffset = SystemClock.elapsedRealtime();
                                cmTimer.stop();

                            }


                        }
                    }

        }

        public void DonePickUpUI_OnClick() {
        if (!resume) {
                            cmTimer.setBase(SystemClock.elapsedRealtime());
                            cmTimer.start();

                        } else {
                            cmTimer.start();
                        }
                        assert cmTimer != null;
                        cmTimer.setOnChronometerTickListener(arg0 -> {
                            if (!resume) {
                                if(mPresenter.getLocalSTATUS().equalsIgnoreCase(LOCAL_START_RIDE)) {
                                    long minute = (((SystemClock.elapsedRealtime() - cmTimer.getBase()) / 1000) / 60);
                                    long second = (((SystemClock.elapsedRealtime() - cmTimer.getBase()) / 1000) % 60);
                                    elapsedTime_Done_pickup = SystemClock.elapsedRealtime();
                                    Log.d(TAG, "onChronometerTick: " + minute + " : " + second);
                                    offline_waiting_time.setText(minute + " : " + second);
                                }
                            } else {
                                if (mPresenter.getLocalSTATUS().equalsIgnoreCase(LOCAL_START_RIDE)) {
                                    long minute = ((elapsedTime_Done_pickup - cmTimer.getBase()) / 1000) / 60;
                                    long second = ((elapsedTime_Done_pickup - cmTimer.getBase()) / 1000) % 60;
                                    elapsedTime_Done_pickup = elapsedTime_Done_pickup + 1000;
                                    Log.d(TAG, "onChronometerTick: " + minute + " : " + second);
                                    offline_waiting_time.setText(minute + " : " + second);
                                    /*offline booking*/
                                }
                            }
                        });
                    /*offline booking*/


                }

         private void startRide_OnCLICK() {

               cmTimer.setOnChronometerTickListener(arg0 -> {
                        if (!resume) {
                            if(mPresenter.getLocalSTATUS().equalsIgnoreCase(LOCAL_CONTINUE_RIDE)) {
                                long minute = (((SystemClock.elapsedRealtime() - cmTimer.getBase()) / 1000) / 60) - elapsedTime_Done_pickup;
                                long second = (((SystemClock.elapsedRealtime() - cmTimer.getBase()) / 1000) % 60) - elapsedTime_Done_pickup;
                                elapsedTime_Done_pickup = SystemClock.elapsedRealtime();
                                Log.d(TAG, "onChronometerTick: " + minute + " : " + second);
                                offline_waiting_time.setText(minute + " : " + second);
                            }
                        } else {
                            if (mPresenter.getLocalSTATUS().equalsIgnoreCase(LOCAL_CONTINUE_RIDE)) {
                                long minute = ((elapsedTime_Done_pickup - cmTimer.getBase()) / 1000) / 60;
                                long second = ((elapsedTime_Done_pickup - cmTimer.getBase()) / 1000) % 60;
                                elapsedTime_Done_pickup = elapsedTime_Done_pickup + 1000;
                                Log.d(TAG, "onChronometerTick: " + minute + " : " + second);
                                offline_waiting_time.setText(minute + " : " + second);
                                /*offline booking*/
                            }
                        }
                    });



         }      


    }}

【问题讨论】:

标签: java android


【解决方案1】:

您将需要一个跟踪时间的变量。

long timeWhenStopped = 0;

停止计时器时更新变量的值

timeWhenStopped = cmTimer.getBase() - SystemClock.elapsedRealtime();
cmTimer.stop();

在启动计时器之前使用此变量调整计时器

cmTimer.setBase(SystemClock.elapsedRealtime() + timeWhenStopped);
cmTimer.start();

最后,如果您有办法重置计时器,那么您应该记得也重置 timeWhenStopped 变量。

cmTimer.setBase(SystemClock.elapsedRealtime());
timeWhenStopped = 0;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多