У меня есть легкий выход. Это разовая инвестиционная работа
Скопируйте следующий класс в ваш проект ...
public class DatePickerHelper {
/********************************************DatePickerRelatedWork*****************************/
public static void showDatePicker(Activity activity, OnDateSelectedListener listener, boolean shouldUsePreviousDate) {
Calendar currentDate = Calendar.getInstance();
int currentYear = currentDate.get(Calendar.YEAR);
int currentMonth = currentDate.get(Calendar.MONTH);
int currentDay = currentDate.get(Calendar.DAY_OF_MONTH);
DatePickerDialog datePicker = new DatePickerDialog(activity, new MyDateSetListener(listener), currentYear, currentMonth, currentDay);
datePicker.setTitle("Select date");
if (shouldUsePreviousDate){
datePicker.getDatePicker().setMinDate(-1893475799000L);
}else {
datePicker.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
}
datePicker.show();
}
public static class MyDateSetListener implements DatePickerDialog.OnDateSetListener {
private OnDateSelectedListener listener;
public MyDateSetListener(OnDateSelectedListener listener) {
this.listener = listener;
}
@Override
public void onDateSet(DatePicker datepicker, int selectedYear, int selectedMonth, int selectedDay) {
String selectedDateString = null;
selectedMonth = selectedMonth + 1;
if (selectedDay >= 0 && selectedDay < 10 && selectedMonth >= 0 && selectedMonth < 10) {
selectedDateString = "0" + selectedDay + "-" + "0" + selectedMonth + "-" + selectedYear;
} else if (selectedDay >= 0 && selectedDay < 10) {
selectedDateString = "0" + selectedDay + "-" + selectedMonth + "-" + selectedYear;
} else if (selectedMonth >= 0 && selectedMonth < 10) {
selectedDateString = selectedDay + "-" + "0" + selectedMonth + "-" + selectedYear;
} else {
selectedDateString = selectedDay + "-" + selectedMonth + "-" + selectedYear;
}
listener.onDateSelected(selectedDateString);
}
}
public interface OnDateSelectedListener {
void onDateSelected(String selectedDateString);
}
}
Затем скопируйте приведенный ниже метод в свой фрагмент ...
private void showDatePickerDialog(){
DatePickerHelper.showDatePicker(AddCashbookActivity.this, new DateTimePickerWork.OnDateSelectedListener() {
@Override
public void onDateSelected(String selectedDateString) {
editText.setText(selectedDateString);
}
},true);
}
Затем вызовите вышеуказанный метод из вашего прослушивателя EditText (оба
OnFocusChangeListener
и
OnClickListener
) * * тысяча двадцать-один
Ниже приведен пример ...
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if (hasFocus){
showDatePickerDialog();
}
}
});
editText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showDatePickerDialog();
}
});
Изменить
EditText
переменная к вашему имени переменной EditText.
И все готово!
Понимание кода
Вышеупомянутый класс можно использовать несколько раз в вашем проекте, и вам не нужно думать о внутренней работе класса Helper. Самая сложная часть была выполнена классом, и вы получите ответный звонок только тогда, когда выбрана дата.
showDatePicker
метод требует 3 параметра.
- Объект деятельности
- Объект OnDateSelectedListener - как и любой другой слушатель
- shouldUsePreviousDate - логический параметр, который отвечает за то, должен ли инструмент выбора даты позволять пользователю выбирать прошлые даты или отключать его!
Если вам нужно изменить формат даты, вы можете изменить метод
onDateSet
Вы можете изменить 10-05-2018 на 10/05/2018 или другое. Просто прочитайте основную часть метода, и вы поймете, что изменить.
Надеюсь, это поможет вам и многим другим.
EDIT
Добавьте android:focusable="false"
в XML-файл EditText, чтобы обеспечить одно касание, и тогда вы можете избежать использования setOnFocusChangeListener
в своем коде Java.