Created
April 8, 2016 12:49
-
-
Save ivkil/5538a34eaf28990cc3718d231871daca to your computer and use it in GitHub Desktop.
Revisions
-
ivkil created this gist
Apr 8, 2016 .There are no files selected for viewing
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 charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,128 @@ 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); } }