DatePickerを使用するためにここで見つけたTimePickerを変更しました。 TimePickerは、指定された時間、長い形式でミリ秒を格納する際に問題なく動作しますが、SimpleDateFormatに変更して文字列を格納するとかなりエラーになります。ここでDatePickerDialogが永続化されていないString/crashing
は私の人生のために
import android.content.Context;
import android.content.res.TypedArray;
import android.preference.DialogPreference;
import android.util.AttributeSet;
import android.view.View;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class DateSelector extends DialogPreference
{
private Calendar calendar;
private android.widget.DatePicker picker = null;
public DateSelector(Context ctxt) {
this(ctxt, null);
}
public DateSelector(Context ctxt, AttributeSet attrs) {
this(ctxt, attrs, android.R.attr.dialogPreferenceStyle);
}
public DateSelector(Context ctxt, AttributeSet attrs, int defStyle) {
super(ctxt, attrs, defStyle);
setPositiveButtonText("Save");
setNegativeButtonText("Cancel");
calendar = Calendar.getInstance();
}
@Override
protected View onCreateDialogView() {
picker = new android.widget.DatePicker(getContext());
return (picker);
}
@Override
protected void onBindDialogView(View v) {
super.onBindDialogView(v);
picker.updateDate(
calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
}
@Override
protected void onDialogClosed(boolean positiveResult) {
super.onDialogClosed(positiveResult);
if (positiveResult)
{
updateCalendar(picker.getDayOfMonth(), picker.getMonth(), picker.getYear());
setSummary(getSummary());
if (callChangeListener(calendar.getTimeInMillis())) {
SimpleDateFormat format = new SimpleDateFormat("MM-dd-yyyy");
//persistString(format.format(calendar.getTime());
notifyChanged();
}
}
}
@Override
protected Object onGetDefaultValue(TypedArray a, int index) {
return (a.getString(index));
}
@Override
protected void onSetInitialValue(boolean restoreValue, Object defaultValue)
{
if (restoreValue)
{
if (defaultValue == null) {
updateCalendar(
calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.MONTH), calendar.get(Calendar.YEAR));
} else {
String[] split = defaultValue.toString().split("-");
updateCalendar(
Integer.parseInt(split[1]), Integer.parseInt(split[0]), Integer.parseInt(split[2]));
}
} else {
if (defaultValue == null) {
updateCalendar(
calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.MONTH), calendar.get(Calendar.YEAR));
} else {
String[] split = defaultValue.toString().split("-");
updateCalendar(
Integer.parseInt(split[1]), Integer.parseInt(split[0]), Integer.parseInt(split[2]));
}
}
setSummary(getSummary());
}
public void updateCalendar(int day, int month, int year) {
calendar.set(Calendar.DAY_OF_MONTH, day);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.YEAR, year);
}
@Override
public CharSequence getSummary() {
if (calendar != null) {
SimpleDateFormat format = new SimpleDateFormat("MM-dd-yyyy");
return format.format(calendar.getTime());
}
return null;
}
}
、私のコードですが、私はそれがpersistString方法にクラッシュするようには機能し得ていないことができます。私はこれを正しく使用しているという印象を受けています。問題にいくつかの知恵を持つ人はいますか?ここで
は私のlogcatです:
とjava.lang.ClassCastException:java.lang.Longのはandroid.app.SharedPreferencesImpl.getString(SharedPreferencesImpl.java で java.lang.Stringで にキャストすることはできません:android.preference.Preference.persistStringにおける224) でandroid.preference.Preference.getPersistedString(Preference.java:1429) (Preference.java:1398)
私は文字列を格納しようとしているので、なぜこれを与えているのでしょうか。ここで
は
<Utilities.DateSelector
android:title="Year/Month/Day "
android:key="date"
android:dependency="birthday"/>
おかげで、また、環境設定画面です。
Logcat please ... –
Rusheelメインポストを更新しました。 – woahguy
どこにエラーが表示されますか。コードをハイライトしてください。 –