3周遅れのマイニング記録

2017年8月から始めたマイニングの記録です。昔はAndroidアプリを作成していたので混在していますがご容赦ください。

【Android】PreferenceでDatePickerを表示するクラスを作ってみた

time 2011/05/14

たまには技術のことも書かないとね。
っということで昨日作ったクラスについて書きたいと思います。

Preferenceは設定画面を簡単に作ることができるというものですが、この中には以下のようなものがあります。
・ListPreference
・EditTextPreference
・CheckBoxPreference
・RingtonePreference
・Preference
本来ならこれらだけでいいのでしょうが、私としてはVFギャラリーでどうしても(?)DatePickerを表示するPreferenceが必要でした。

仕方ないのでDatePickerPreferenceというのを作ってみました。
xml/preference.xmlには通常の自作Viewと同じように宣言したらいいので省略します。
作成したクラスの仕様は以下のとおり。
1) 設定画面から選択するとDatePikerが設定された設定ダイアログが表示されること。
2) 初期値として設定ファイルに保存されているLong値を表示すること。
3) 日付を選択して確定したら設定ファイルに日付のLong値が保存されること。
(おまけ: 選択した日付を設定画面のSummaryに表示すること。)

というわけで実装しました。
クラス作成時にはDialogPreferenceを継承します。

import java.util.Date;

import android.content.Context;
import android.preference.DialogPreference;
import android.util.AttributeSet;
import android.view.View;
import android.widget.DatePicker;
import android.widget.DatePicker.OnDateChangedListener;

public class DatePickerPreference extends DialogPreference {
private DatePicker datePicker;

public DatePickerPreference(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO 自動生成されたコンストラクター・スタブ
}

public DatePickerPreference(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
// TODO 自動生成されたコンストラクター・スタブ
}

@Override
protected View onCreateDialogView() {
// TODO 自動生成されたメソッド・スタブ
this.datePicker = new DatePicker(this.getContext());
long dateLong = Long.valueOf(this.getPersistedString("-2209021200000"));
Date date = new Date(dateLong);
datePicker.init(date.getYear()+1900, date.getMonth(), date.getDate(), new OnDateChangedListener() {

public void onDateChanged(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// TODO 自動生成されたメソッド・スタブ

}
});
return this.datePicker;
}

@Override
protected void onDialogClosed(boolean positiveResult) {
// TODO 自動生成されたメソッド・スタブ
if(positiveResult){
int year = datePicker.getYear();
int month = datePicker.getMonth();
int day = datePicker.getDayOfMonth();
Date date = new Date(year-1900,month,day);
persistString(String.valueOf(date.getTime()));
this.setSummary(String.format("%d/%d/%d 00:00:00", year,month+1,day));
}
super.onDialogClosed(positiveResult);
}

public String getValue(){
long dateLong = Long.valueOf(this.getPersistedString("-2209021200000"));
Date date = new Date(dateLong);
return String.format("%04d/%02d/%02d %02d:%02d:%02d", date.getYear()+1900,date.getMonth()+1,date.getDate(),date.getHours(),date.getMinutes(),date.getSeconds());
}
}

流れとしては、設定画面から項目を選択されると、onCreateDialogView()が実行されます。
ここでDatePickerを作成し、DatePickerのinitメソッドで日付を初期化します。
初期化する値は、this.getPersistedString(“初期値”);として取得します。

次に日付を選択してOKボタンを押したときの処理として、onDialogClosed()が実行されます。
ここで、positiveResultがtrueならばDatePickerの日付を取得して、persistString(String.valueOf(date.getTime())); で書き込みを行います。

これだけでできるんですねぇ。
もっとしっかり考えればTimePickerもあわせてできるんでしょうけど、そこまでは今回は必要ないので未検証。

意外と簡単にDialogPreferenceを拡張できました。
・・・といっても本当は下記ブログを参考にしてできたことです。
DialogPreferenceをカスタマイズする – hidecheckの日記

ありがとうございます。m(_ _)m

LINEで送る
Pocket
[`evernote` not found]

おもちゃ

資産運用(ポジティブ)

2019年3月
« 2月    
 12
3456789
10111213141516
17181920212223
24252627282930
31  
Back to Top ↑