0

我正在 android sdk 中编写秒表,但即使我按下回,我也想继续前进。我在一定程度上了解活动生命周期,我应该覆盖 onPause 和 onResume 方法,但不知道如何使用它,因为 SharePreference 编辑器无法接收 Chronometer 对象

    package com.example.taekwondobuddy.util;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.LinearLayout;



 public class Time extends Activity {
 Chronometer mChronometer;

@Override
  protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);

mChronometer = new Chronometer(this);
layout.addView(mChronometer);

Button startButton = new Button(this);
startButton.setText("Start");
startButton.setOnClickListener(mStartListener);
layout.addView(startButton);

Button stopButton = new Button(this);
stopButton.setText("Stop");
stopButton.setOnClickListener(mStopListener);
layout.addView(stopButton);

Button resetButton = new Button(this);
resetButton.setText("Reset");
resetButton.setOnClickListener(mResetListener);
layout.addView(resetButton);        

setContentView(layout);
}



View.OnClickListener mStartListener = new OnClickListener() {
public void onClick(View v) {
    mChronometer.start();

}
};

View.OnClickListener mStopListener = new OnClickListener() {
public void onClick(View v) {
    mChronometer.stop();

}
};

View.OnClickListener mResetListener = new OnClickListener() {
public void onClick(View v) {
    mChronometer.setBase(SystemClock.elapsedRealtime());

 }
 };
 }

任何提示或建议?帮助表示赞赏!

4

2 回答 2

2
// try this
public class Time extends Activity {
    Chronometer mChronometer;
    private SharedPreferences sharedPreferences;
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);

        sharedPreferences = getSharedPreferences(getString(R.string.app_name), MODE_PRIVATE);
        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL);
        mChronometer = new Chronometer(this);

        layout.addView(mChronometer);

        Button startButton = new Button(this);
        startButton.setText("Start");
        startButton.setOnClickListener(mStartListener);
        layout.addView(startButton);

        Button stopButton = new Button(this);
        stopButton.setText("Stop");
        stopButton.setOnClickListener(mStopListener);
        layout.addView(stopButton);

        Button resetButton = new Button(this);
        resetButton.setText("Reset");
        resetButton.setOnClickListener(mResetListener);
        layout.addView(resetButton);

        setContentView(layout);
    }

    private void showElapsedTime() {
        long elapsedMillis = SystemClock.elapsedRealtime() - mChronometer.getBase();
        Toast.makeText(MyActivity.this, "Elapsed milliseconds: " + elapsedMillis,
                Toast.LENGTH_SHORT).show();
    }

    View.OnClickListener mStartListener = new View.OnClickListener() {
        public void onClick(View v) {
            int stoppedMilliseconds = 0;

            String chronoText = mChronometer.getText().toString();
            String array[] = chronoText.split(":");
            if (array.length == 2) {
                stoppedMilliseconds = Integer.parseInt(array[0]) * 60 * 1000
                        + Integer.parseInt(array[1]) * 1000;
            } else if (array.length == 3) {
                stoppedMilliseconds = Integer.parseInt(array[0]) * 60 * 60 * 1000
                        + Integer.parseInt(array[1]) * 60 * 1000
                        + Integer.parseInt(array[2]) * 1000;
            }

            mChronometer.setBase(SystemClock.elapsedRealtime() - stoppedMilliseconds);
            mChronometer.start();
        }
    };

    View.OnClickListener mStopListener = new View.OnClickListener() {
        public void onClick(View v) {
            mChronometer.stop();
        }
    };

    View.OnClickListener mResetListener = new View.OnClickListener() {
        public void onClick(View v) {
            mChronometer.setBase(SystemClock.elapsedRealtime());
        }
    };

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        prepareSharedData();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mChronometer.setText(sharedPreferences.getString("time", "00:00"));
    }

    @Override
    protected void onPause() {
        super.onPause();
        prepareSharedData();
    }

    public void prepareSharedData(){
        String chronoText = mChronometer.getText().toString();
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString("time", chronoText);
        editor.commit();
    }
}
于 2013-11-11T06:14:22.983 回答
0

如果你想在你离开的地方继续你的倒计时而不是你需要共享的偏好,否则如果你想继续秒表即使用户按下后退按钮你不需要共享偏好,共享偏好用于存储原始和字符串数据类型,您可以使用AsyncTaskService来执行此操作,但如果您使用 Chronometer,则不能将Chronometer本身存储在共享首选项中,而是将 Chronometer 的其他方法返回的值elapsedRealtime()从其他方法返回的值 在 AsyncTask 或 Service 中,您可以继续轮询,保持活动直到它的方法完成,即使你按下后退按钮保持活动elapsedRealtime()AsyncTaskdoInBackgroundAsyncTask

于 2013-11-11T05:56:28.360 回答