万岁!
我正在尝试编写我的第一个Android应用程序,但我遇到了障碍。
我想让用户设置一个‘开始’和‘停止’的时间,为每日计划。我已经成功地实现了TimePickerDialog,以及它旁边的TextView,但我永远也想不出如何将用户选择的时间保存为SharedPreferences字符串。
代码如下(为清晰起见,请将其删减):
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.setup);
// Retrieve the shared preferences
mUserSettings = getSharedPreferences(USER_PREFERENCES, MODE_PRIVATE);
// capture our View elements
mTimeDisplayStart = (TextView) findViewById(R.id.TextView_ScheduleStart_Info);
mPickTimeStart = (Button) findViewById(R.id.Button_ScheduleStart);
// add a click listener to the button
mPickTimeStart.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showDialog(TIME_DIALOG_START);
}
});
// get the current time
final Calendar c = Calendar.getInstance();
mHourStart = c.get(Calendar.HOUR_OF_DAY);
mMinuteStart = c.get(Calendar.MINUTE);
// display the current date
updateDisplayStart();
}
// updates the time we display in the TextView
private void updateDisplayStart() {
mTimeDisplayStart.setText(
new StringBuilder()
.append(padStart(mHourStart)).append(":")
.append(padStart(mMinuteStart)));
}
private static String padStart(int c) {
if (c >= 10)
return String.valueOf(c);
else
return "0" + String.valueOf(c);
}
// the callback received when the user "sets" the time in the dialog
private TimePickerDialog.OnTimeSetListener mTimeSetListenerStart =
new TimePickerDialog.OnTimeSetListener() {
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
mHourStart = hourOfDay;
mMinuteStart = minute;
updateDisplayStart();
}
};
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case TIME_DIALOG_START:
return new TimePickerDialog(this,
mTimeSetListenerStart, mHourStart, mMinuteStart, false);
}
return null;
}我假设应该在更新TextView的同时节省时间……但我不知道该怎么做。
我现在已经花了5到6个小时寻找答案,但我真的找不到一个。我已经用SharedPreferences.Editor进行了试验,但这不起作用,因为我需要将时间存储为一个长时间,而不是一个字符串。
我已经无能为力了,我真的很感谢你的帮助!
发布于 2012-03-21 12:38:26
你必须这样做
private TimePickerDialog.OnTimeSetListener mTimeSetListenerStart =
new TimePickerDialog.OnTimeSetListener() {
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
mHourStart = hourOfDay;
mMinuteStart = minute;
updateDisplayStart();
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, hourOfDay);
cal.set(Calendar.MINUTE, minute);
mUserSettings.edit().putLong("starttime", cal.getTimeInMillis()).commit();
}
};发布于 2012-03-21 12:35:06
在以下方法中
// updates the time we display in the TextView
private void updateDisplayStart() {
mTimeDisplayStart.setText(
new StringBuilder()
.append(padStart(mHourStart)).append(":")
.append(padStart(mMinuteStart)));
});
SharedPreferences settingsActivity = getSharedPreferences("todolist1",
Activity.MODE_PRIVATE);
SharedPreferences.Editor prefEditor = settingsActivity.edit();
prefEditor.putString("DateToDisplay",new StringBuilder()
.append(padStart(mHourStart)).append(":")
.append(padStart(mMinuteStart)); // updates the time we display in the TextView
prefEditor.commit();
}在此之后,您希望从共享首选项中检索数据的位置如下
SharedPreferences settingsActivity = getSharedPreferences("todolist1",
Activity.MODE_PRIVATE);
if (settingsActivity.contains(DateToDisplay)) {
String saveddate = settingsActivity
.getString(DateToDisplay, "");发布于 2012-03-21 12:40:00
SharedPreferences支持long%s。您可以这样做
SharedPreferences prefs = getSharedPreferences("prefs", Context.MODE_PRIVATE); prefs.edit().putLong("longKey", longValue).commit();
来存储值。要检索它,您可以这样做
SharedPreferences prefs = getSharedPreferences("prefs", Context.MODE_PRIVATE); long longValue = prefs.getLong("longKey", 0l);
https://stackoverflow.com/questions/9798563
复制相似问题