我有一个自定义的DialogPreference。从PreferenceScreen调用Dialog。 一切正常,Dialog启动并显示TimePicker。
但是如何获得所选值? 首先,我尝试在首选项摘要中编写选定的小时数。 (因此var xxx :) 稍后,我想将值保存在SharedPreferences中。
这就是我现在所拥有的:
public class Calendar extends DialogPreference implements
TimePicker.OnTimeChangedListener {
TimePicker tp;
int xxx;
public Calendar(Context context, AttributeSet attrs) {
super(context, attrs);
initialize();
}
public Calendar(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initialize();
}
private void initialize() {
setPersistent(true);
}
@Override
protected View onCreateDialogView() {
tp = new TimePicker(getContext());
tp.setIs24HourView(true);
return tp;
}
@Override
public void onTimeChanged(TimePicker arg0, int arg1, int arg2) {
}
@Override
public void onDialogClosed(boolean positiveResult) {
super.onDialogClosed(positiveResult);
if (positiveResult) {
// getEditor().
setTitle(getTitle());
setSummary(Integer.toString(xxx));
}
}
private TimePicker.OnTimeChangedListener mTimeSetListener =
new TimePicker.OnTimeChangedListener() {
@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
xxx=hourOfDay;
}
};
}
非常感谢和最诚挚的问候
答案 0 :(得分:1)
感谢您提出这个问题,它为我提供了一个关于如何创建DialogPreference的重要答案。
我希望我也可能有一个答案。我稍微修改了你的代码,我现在可以存储从对话框中选择的时间:
@Override
protected View onCreateDialogView() {
this.tp = new TimePicker(getContext());
this.tp.setIs24HourView(true);
final String storedValue = getPersistedString("07:00");
final String[] split = storedValue.split(":");
this.tp.setCurrentHour(Integer.parseInt(split[0]));
this.tp.setCurrentMinute(Integer.parseInt(split[1]));
return this.tp;
}
@Override
public void onDialogClosed(boolean positiveResult) {
super.onDialogClosed(positiveResult);
if (positiveResult) {
final String result = this.tp.getCurrentHour() + ":" + this.tp.getCurrentMinute();
persistString(result);
}
}
显示对话框时,我检索存储的值,只需设置currentHour
的{{1}}和currentMinute
字段。关闭对话框时的另一种方法。由于我在路上和路上都控制了格式,因此非法值不应该存在问题。
这是你想要的吗?
答案 1 :(得分:0)
要将值存储在共享首选项中,请根据喜好实现Change Listener。 请注意,首选项应为默认的共享首选项
preferences = PreferenceManager.getDefaultSharedPreferences(context);
editor = preferences.edit();
在onprefchange
内部:
if (preference.getKey().equals(getString(R.string.reminder_end_time_key))){
editor.putString("End_Date", String.valueOf(newValue));
editor.apply();
endTimePickerPreference.setSummary((CharSequence)newValue);
}