java - android 如何使用 SharedPreference 编写秒表

标签 java android

我正在 android sdk 中编写秒表,但即使按下返回键我也想继续前进。我在某种程度上了解 Activity 生命周期,我应该重写 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());

 }
 };
 }

有什么建议或建议吗?感谢帮助!

最佳答案

// 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();
    }
}

关于java - android 如何使用 SharedPreference 编写秒表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19899570/

相关文章:

java - Selenium WebDriver : clicking on elements within an SVG using XPath

java - 第一次加载 Android 时 HIGHChart 不显示图表

android - 在 Espresso 中,我如何测试 RecyclerView 的 *any* child 是否包含正确的文本

android - 反复运行 runOnUiThread() 导致异常

android - 从 PreferenceScreen 发送广播 Intent ?

java - Spring MVC 3 Controller 请求处理程序通用

java - ValueAnimator 让一个元素消失?

java - 从 JAXB 和 Jersey 生成更多类似 json 的 json

java - 为什么某些变量必须用一个值(例如 0、null)初始化?

android - 我如何知道 Android 设备上的 GPU 使用情况?