Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android首选项中设置日期和时间?_Android_Android Preferences - Fatal编程技术网

如何在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;
    }
}