public class MinutePickerDialog extends AlertDialog implements android.content.DialogInterface.OnClickListener {
private OnMinuteSelectedListener mListener;
private NumberPicker mMinutePicker;
public MinutePickerDialog(final Context context, OnMinuteSelectedListener callback) {
super(context);
mListener = callback;
setIcon(0);
Context themeContext = getContext();
setButton(BUTTON_NEGATIVE, themeContext.getText(R.string.vibrate_minute_negative), this);
setButton(BUTTON_POSITIVE, themeContext.getText(R.string.vibrate_minute_positive), this);
mMinutePicker = new NumberPicker(context);
mMinutePicker.setMinValue(0);
mMinutePicker.setMaxValue(4);
final String[] minutes = context.getResources().getStringArray(R.array.minute);
setTitle(context.getString(R.string.vibrate_minute_title, minutes[0]));
mMinutePicker.setDisplayedValues(minutes);
mMinutePicker.setOnValueChangedListener(new OnValueChangeListener() {
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
setTitle(context.getString(R.string.vibrate_minute_title, minutes[newVal]));
}
});
LinearLayout layout = new LinearLayout(context);
layout.setGravity(Gravity.CENTER);
layout.addView(mMinutePicker, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT));
setView(layout);
setCanceledOnTouchOutside(true);
}
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case BUTTON_POSITIVE:
if (mListener != null) {
mMinutePicker.clearFocus();
mListener.onMinuteSelected(mMinutePicker, Integer.parseInt(mMinutePicker.getDisplayedValues()[mMinutePicker.getValue()]));
}
break;
default:
break;
}
}
/**
* The callback interface used to indicate the user is done filling in the
* time (they clicked on the 'Set' button).
*/
public interface OnMinuteSelectedListener {
/**
* @param view
* The view associated with this listener.
* @param minute
* The minute that was set.
*/
void onMinuteSelected(NumberPicker view, int minute);
}
}
new MinutePickerDialog(getActivity(), new OnMinuteSelectedListener() {
@Override
public void onMinuteSelected(NumberPicker view, int minute) {
tvThreshold.setText(getString(R.string.vibrate_minute_title, minute));
}
}).show();