I have an android project with Time Picker Dialog and i wish to add the DATE PICKER to the preferences
I'v tried several codes , but none of them worked for me
pref_dialog_time.xml
<!-- Layout for the TimePreference Dialog -->
<TimePicker
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/edit"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="18dp"
android:paddingTop="18dp"
android:theme="@style/AppAlertDialogContent"/>
TimePreference.java
public class TimePreference extends DialogPreference {
private int mTime;
private int mDialogLayoutResId = R.layout.pref_dialog_time;
public TimePreference(Context context) {
// Delegate to other constructor
this(context, null);
}
public TimePreference(Context context, AttributeSet attrs) {
// Delegate to other constructor
// Use the preferenceStyle as the default style
this(context, attrs, R.attr.preferenceStyle);
}
public TimePreference(Context context, AttributeSet attrs, int defStyleAttr) {
// Delegate to other constructor
this(context, attrs, defStyleAttr, defStyleAttr);
}
public TimePreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
public int getTime() {
return mTime;
}
public void setTime(int time) {
mTime = time;
// Save to SharedPreference
persistInt(time);
}
@Override
protected Object onGetDefaultValue(TypedArray a, int index) {
// The type of this preference is Int, so we read the default value from the attributes
// as Int. Fallback value is set to 0.
return a.getInt(index, 0);
}
@Override
public int getDialogLayoutResource() {
return mDialogLayoutResId;
}
@Override
protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValue) {
// If the value can be restored, do it. If not, use the default value.
setTime(restorePersistedValue ?
getPersistedInt(mTime) : (int) defaultValue);
}
}
TimePreferenceDialogFragmentCompat.java
public class TimePreferenceDialogFragmentCompat extends PreferenceDialogFragmentCompat {
private TimePicker mTimePicker;
public static TimePreferenceDialogFragmentCompat newInstance(String key) {
final TimePreferenceDialogFragmentCompat
fragment = new TimePreferenceDialogFragmentCompat();
final Bundle b = new Bundle(1);
b.putString(ARG_KEY, key);
fragment.setArguments(b);
return fragment;
}
@Override
protected void onBindDialogView(View view) {
super.onBindDialogView(view);
mTimePicker = (TimePicker) view.findViewById(R.id.edit);
// Exception: There is no TimePicker with the id 'edit' in the dialog.
if (mTimePicker == null) {
throw new IllegalStateException("Dialog view must contain a TimePicker with id 'edit'");
}
// Get the time from the related Preference
Integer minutesAfterMidnight = null;
DialogPreference preference = getPreference();
if (preference instanceof TimePreference) {
minutesAfterMidnight = ((TimePreference) preference).getTime();
}
// Set the time to the TimePicker
if (minutesAfterMidnight != null) {
int hours = minutesAfterMidnight / 60;
int minutes = minutesAfterMidnight % 60;
boolean is24hour = DateFormat.is24HourFormat(getContext());
mTimePicker.setIs24HourView(is24hour);
mTimePicker.setCurrentHour(hours);
mTimePicker.setCurrentMinute(minutes);
}
}
@Override
public void onDialogClosed(boolean positiveResult) {
if (positiveResult) {
// Get the current values from the TimePicker
int hours;
int minutes;
if (Build.VERSION.SDK_INT >= 23) {
hours = mTimePicker.getHour();
minutes = mTimePicker.getMinute();
} else {
hours = mTimePicker.getCurrentHour();
minutes = mTimePicker.getCurrentMinute();
}
// Generate value to save
int minutesAfterMidnight = (hours * 60) + minutes;
// Save the value
DialogPreference preference = getPreference();
if (preference instanceof TimePreference) {
TimePreference timePreference = ((TimePreference) preference);
// This allows the client to ignore the user value.
if (timePreference.callChangeListener(minutesAfterMidnight)) {
// Save the value
timePreference.setTime(minutesAfterMidnight);
}
}
}
}
}
PreferenceFragmentCustom.java
public class PreferenceFragmentCustom extends PreferenceFragmentCompat {
/**
* {@inheritDoc}
*/
@Override
public void onCreatePreferences(Bundle bundle, String s) {
// Load the Preferences from the XML file
addPreferencesFromResource(R.xml.app_preferences);
}
/**
* {@inheritDoc}
*/
@Override
public void onDisplayPreferenceDialog(Preference preference) {
// Try if the preference is one of our custom Preferences
DialogFragment dialogFragment = null;
if (preference instanceof TimePreference) {
// Create a new instance of TimePreferenceDialogFragment with the key of the related
// Preference
dialogFragment = TimePreferenceDialogFragmentCompat.newInstance(preference.getKey());
}
if (dialogFragment != null) {
// The dialog was created (it was one of our custom Preferences), show the dialog for it
dialogFragment.setTargetFragment(this, 0);
dialogFragment.show(this.getFragmentManager(), "android.support.v7.preference" +
".PreferenceFragment.DIALOG");
} else {
// Dialog creation could not be handled here. Try with the super method.
super.onDisplayPreferenceDialog(preference);
}
}
}
And the code in app_prefereces.xml for the Time picker :
<de.jakobulbrich.preferences.TimePreference
style="@style/AppPreference.DialogPreference"
android:key="@string/pref_pref4"
android:summary="@string/preferences_time_summ"
android:title="@string/preferences_time_title"/>
So what is the best way to add a simple Date picker