如何在android首选项中设置日期和时间?
我想在首选项中设置日期和时间。在我的应用程序中,我正在使用自定义日期和时间对话框,并想在首选项中设置时间和日期,从该对话框中进行选择 用于显示日期和时间选择器对话框的函数:如何在android首选项中设置日期和时间?,android,android-preferences,Android,Android Preferences,我想在首选项中设置日期和时间。在我的应用程序中,我正在使用自定义日期和时间对话框,并想在首选项中设置时间和日期,从该对话框中进行选择 用于显示日期和时间选择器对话框的函数: public void showDialog() { // TODO Auto-generated method stub Dialog dialog = new Dialog(MainActivity.this); dialog.setContentView(R.layout.date_time_
public void showDialog() {
// TODO Auto-generated method stub
Dialog dialog = new Dialog(MainActivity.this);
dialog.setContentView(R.layout.date_time_dialog);
dialog.setTitle("Custom Dialog");
set_time = (Button) dialog.findViewById(R.id.set_time);
dialog.show();
timepk = (TimePicker)dialog.findViewById(R.id.timePicker1);
final Calendar c = Calendar.getInstance();
hour = c.get(Calendar.HOUR_OF_DAY);
min = c.get(Calendar.MINUTE);
timepk.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
hour = hourOfDay;
min = minute;
}
});
datepk = (DatePicker)dialog.findViewById(R.id.datePicker1);
final Calendar cal = Calendar.getInstance();
Year = cal.get(Calendar.YEAR);
month = cal.get(Calendar.MONTH);
day = cal.get(Calendar.DAY_OF_MONTH);
datepk.init(Year, month, day, new OnDateChangedListener() {
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// TODO Auto-generated method stub
Year = year;
month = monthOfYear;
day = dayOfMonth;
}
});
在共享首选项中保存日期和时间的功能:
public void setTime(){
SharedPreferences prefer = getSharedPreferences("MyPREFERENCES", 0);
SharedPreferences.Editor preferencesEditor = prefer.edit();
preferencesEditor.putInt("Year",Year);
preferencesEditor.putInt("Month",month);
preferencesEditor.putInt("Day",day);
preferencesEditor.putInt("Hour",hour);
preferencesEditor.putInt("Min",min);
Boolean flag = preferencesEditor.commit();
if(flag==true)
{
Toast.makeText(getApplicationContext(),
"Time saved sucessfully!",
Toast.LENGTH_LONG).show();
}
}
如果您觉得以毫秒为单位存储时间不合适,可以这样做:
public void storeDate(Date theDate){
SimpleDateFormat df = new SimpleDateFormat();
df.applyPattern("yyyy/MM/dd HH:mm"); //this is the SQLite timedate pattern
SharedPreferences pm = PreferenceManager.getDefaultSharedPreferences(MyActivity.this);
pm.getEditor().putString("date_key", df.format(theDate));
}
public Date retrieveDate() {
SimpleDateFormat df = new SimpleDateFormat();
df.applyPattern("yyyy/MM/dd HH:mm"); //this is the SQLite timedate pattern
SharedPreferences pm = PreferenceManager.getDefaultSharedPreferences(MyActivity.this);
return df.parse(pm.getString("date_key")); //this may throw an exception you should handle
}
与其将日期的每个部分存储为单独的首选项,不如将单个
long
存储为更好的选择。下面的示例(也在中发布)是一个首选项,它扩展了对话框首选项
,以弹出询问时间的窗口(这只是时间,但您可以将时间选择器换成日期选择器,并很容易地更新onDialogClosed
中的值)。它还实现了一个OnPreferenceChangeListener
,以便您可以在设置新的首选项时执行某些操作(例如,它会将摘要更新为新的时间集):
发布一些代码。。。在您尝试的内容上,请使用共享首选项。从日期开始获取毫秒数并将其存储。该数据的可能副本可能对您有所帮助::
import android.content.Context;
import android.content.res.TypedArray;
import android.preference.DialogPreference;
import android.preference.Preference;
import android.util.AttributeSet;
import android.view.View;
import android.widget.TimePicker;
import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;
public class TimePreference extends DialogPreference implements Preference.OnPreferenceChangeListener {
private TimePicker picker = null;
public final static long DEFAULT_VALUE = 0;
public TimePreference(final Context context, final AttributeSet attrs) {
super(context, attrs, 0);
this.setOnPreferenceChangeListener(this);
}
protected void setTime(final long time) {
persistLong(time);
notifyDependencyChange(shouldDisableDependents());
notifyChanged();
}
protected void updateSummary(final long time) {
final DateFormat dateFormat = android.text.format.DateFormat.getTimeFormat(getContext());
final Date date = new Date(time);
setSummary(dateFormat.format(date.getTime()));
}
@Override
protected View onCreateDialogView() {
picker = new TimePicker(getContext());
picker.setIs24HourView(android.text.format.DateFormat.is24HourFormat(getContext()));
return picker;
}
protected Calendar getPersistedTime() {
final Calendar c = Calendar.getInstance();
c.setTimeInMillis(getPersistedLong(DEFAULT_VALUE));
return c;
}
@Override
protected void onBindDialogView(final View v) {
super.onBindDialogView(v);
final Calendar c = getPersistedTime();
picker.setCurrentHour(c.get(Calendar.HOUR_OF_DAY));
picker.setCurrentMinute(c.get(Calendar.MINUTE));
}
@Override
protected void onDialogClosed(final boolean positiveResult) {
super.onDialogClosed(positiveResult);
if (positiveResult) {
final Calendar c = Calendar.getInstance();
c.set(Calendar.MINUTE, picker.getCurrentMinute());
c.set(Calendar.HOUR_OF_DAY, picker.getCurrentHour());
if (!callChangeListener(c.getTimeInMillis())) {
return;
}
setTime(c.getTimeInMillis());
}
}
@Override
protected Object onGetDefaultValue(final TypedArray a, final int index) {
return a.getInteger(index, 0);
}
@Override
protected void onSetInitialValue(final boolean restorePersistedValue, final Object defaultValue) {
long time;
if (defaultValue == null) {
time = restorePersistedValue ? getPersistedLong(DEFAULT_VALUE) : DEFAULT_VALUE;
} else if (defaultValue instanceof Long) {
time = restorePersistedValue ? getPersistedLong((Long) defaultValue) : (Long) defaultValue;
} else if (defaultValue instanceof Calendar) {
time = restorePersistedValue ? getPersistedLong(((Calendar)defaultValue).getTimeInMillis()) : ((Calendar)defaultValue).getTimeInMillis();
} else {
time = restorePersistedValue ? getPersistedLong(DEFAULT_VALUE) : DEFAULT_VALUE;
}
setTime(time);
updateSummary(time);
}
@Override
public boolean onPreferenceChange(final Preference preference, final Object newValue) {
((TimePreference) preference).updateSummary((Long)newValue);
return true;
}
}