Created
April 8, 2016 12:49
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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