Skip to content

Instantly share code, notes, and snippets.

@ivkil
Created April 8, 2016 12:49
Show Gist options
  • Select an option

  • Save ivkil/5538a34eaf28990cc3718d231871daca to your computer and use it in GitHub Desktop.

Select an option

Save ivkil/5538a34eaf28990cc3718d231871daca to your computer and use it in GitHub Desktop.
Control for the user to pick a month as ready-to-use dialog
package me.ecois.lite.ui.fragment;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.Resources;
import android.os.Build;
import android.os.Bundle;
import android.text.format.DateUtils;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.DatePicker;
import java.util.Calendar;
import me.ecois.lite.R;
public class MonthPickerDialog extends AlertDialog implements DialogInterface.OnClickListener, DatePicker.OnDateChangedListener {
private static final String YEAR = "year";
private static final String MONTH = "month";
private static final String DAY = "day";
private final DatePicker mDatePicker;
private final OnMonthSelectedListener mMonthSetListener;
private final Calendar mCalendar;
public interface OnMonthSelectedListener {
void onMonthSet(int year, int monthOfYear);
}
public MonthPickerDialog(Context context,
OnMonthSelectedListener callBack,
int year,
int monthOfYear) {
this(context, 0, callBack, year, monthOfYear);
}
static int resolveDialogTheme(Context context, int resId) {
if (resId == 0 && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
final TypedValue outValue = new TypedValue();
context.getTheme().resolveAttribute(android.R.attr.datePickerDialogTheme, outValue, true);
return outValue.resourceId;
} else {
return resId;
}
}
public MonthPickerDialog(Context context, int theme, OnMonthSelectedListener listener, int year,
int monthOfYear) {
super(context, resolveDialogTheme(context, theme));
mMonthSetListener = listener;
mCalendar = Calendar.getInstance();
final Context themeContext = getContext();
final LayoutInflater inflater = LayoutInflater.from(themeContext);
final View view = inflater.inflate(R.layout.month_picker_dialog, null);
setView(view);
setButton(BUTTON_POSITIVE, themeContext.getString(android.R.string.ok), this);
setButton(BUTTON_NEGATIVE, themeContext.getString(android.R.string.cancel), this);
mDatePicker = (DatePicker) view.findViewById(R.id.datePicker);
mDatePicker.findViewById(Resources.getSystem().getIdentifier("day", "id", "android")).setVisibility(View.GONE);
mDatePicker.init(year, monthOfYear, 1, this);
updateTitle(year, monthOfYear);
}
@Override
public void onDateChanged(DatePicker view, int year, int month, int day) {
mDatePicker.init(year, month, 1, this);
updateTitle(year, month);
}
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case BUTTON_POSITIVE:
if (mMonthSetListener != null) {
mDatePicker.clearFocus();
mMonthSetListener.onMonthSet(mDatePicker.getYear(), mDatePicker.getMonth());
}
break;
case BUTTON_NEGATIVE:
cancel();
break;
}
}
public DatePicker getDatePicker() {
return mDatePicker;
}
public void updateDate(int year, int monthOfYear) {
mDatePicker.updateDate(year, monthOfYear, 1);
}
private void updateTitle(int year, int month) {
mCalendar.set(Calendar.YEAR, year);
mCalendar.set(Calendar.MONTH, month);
String title = DateUtils.formatDateTime(getContext(),
mCalendar.getTimeInMillis(),
DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_NO_MONTH_DAY);
setTitle(title);
}
@Override
public Bundle onSaveInstanceState() {
final Bundle state = super.onSaveInstanceState();
state.putInt(YEAR, mDatePicker.getYear());
state.putInt(MONTH, mDatePicker.getMonth());
state.putInt(DAY, mDatePicker.getDayOfMonth());
return state;
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
final int year = savedInstanceState.getInt(YEAR);
final int month = savedInstanceState.getInt(MONTH);
final int day = savedInstanceState.getInt(DAY);
mDatePicker.init(year, month, day, this);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment