Reputation: 2771
I want to have time picker in preferences activity. It looks like this:
Then if user clicks on "time", it pops up this dialog:
This is EXACTLY what i wanted. But there are few things to notice:
Dialog is my custom dialog referenced by XML
<TimePicker
android:id="@+id/timePicker1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
My preferences XML
<CheckBoxPreference android:title="Checkbox" android:summary="Checkbox"/>
<EditTextPreference android:summary="time" android:dialogTitle="Hello" android:dialogLayout="@layout/preflayout" />
My Java code:
public static class TestSettings extends PreferenceActivity implements TimePicker.OnTimeChangedListener {
TimePicker tp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref);
tp = (TimePicker) findViewById(R.id.timePicker1);
}
@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
if(view.getId() == R.id.timePicker1) {
Log.i("STATIC", "hour "+hourOfDay+"minute "+minute);
}
}
}
For some reason OnTimeChangedListener does not fire, when i set time. I dont know if this is the right approach to program time picker this way in preferences screen, but i need it exactly like that. Anyway, i don't know why OnTimeChangedListener is not working. Any ideas?
Maybe i need to use another approach to program time picker in preference activity?
Suggestions appriciated. Thanks!
Upvotes: 2
Views: 4395
Reputation: 938
I have to use custom dialog preference to handle TimePicker on my preference activity.
TimePickerDialog.java
public class TimePickerDialog extends DialogPreference{
Context context;
TimePickerDialog timePickerDialog;
TimePicker timePicker;
private final static String TAG = "TIME_DIALOG_PREFERENCE";
private Listener timeListener;
String key;
public TimePickerDialog (Context context) {
this(context, null);
this.context=context;
}
public TimePickerDialog (Context context, AttributeSet attrs) {
this(context, attrs, 0);
this.context=context;
}
public TimePickerDialog (Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
timeListener=(Listener) context;
this.context=context;
setPositiveButtonText("Set");
setNegativeButtonText("Cancel");
}
public void setListener(Listener listener){
timeListener =listener;
}
@Override
public View onCreateDialogView(){
timePicker = new TimePicker(context);
timePicker.setIs24HourView(true);
return timePicker;
}
public void onDialogClosed(boolean positiveResult){
if(timeListener!=null && positiveResult){
timeListener.setTime( key,timePicker.getCurrentHour(),timePicker.getCurrentMinute());
}
}
public interface Listener{
public void setTime(String key,int hour,int minute);
}
}
The dialog is called from xml file preference layout:
<PreferenceCategory android:title="Schedule" >
<com.tuxuri.timepicker.TimePickerDialog
android:defaultValue="08:00"
android:key="schedule_start_time"
android:showDefault="true"
android:summary="When to start"
android:title="Start time" />
</PreferenceCategory>
Then anything invoked by TimePickerDialog will be implemented in PreferenceActivity :
public class UserPreference extends PreferenceActivity implements TimePickerDialog.Listener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
timePicker = new TimePickerDialog(this);
addPreferencesFromResource(R.layout.preference);
}
@Override
public void setTime(String key, int hour, int minute) {
Log.v(TAG,key+"-"+hour+":"+minute);
}
}
Upvotes: 1
Reputation: 5737
You need to call setOnTimeChangedListener(this), probably in your onCreate()
method, like this:
tp.setOnTimeChangedListener(this);
Upvotes: 1