Android установил DatePicker на определенную дату
У меня есть 3 строки, содержащие значения дня, месяца и года. Например:
String mday = "02";
String mmonth="07";
String myear="2013";
Мне нужно установить DatePicker в моей активности на месяц с указанной выше даты. Я не имею в виду просто добавить 1 к значению mmonth... в случае 31-го дня я получу недопустимую дату. Поэтому мне нужен какой-то способ увеличить дату (действительный путь) и установить DatePicker с его значением. Я знаю, что установка datePicker со значениями Int выполняется следующим образом:
DatePicker datepicker = (DatePicker) findViewById(R.id.datePicker1);
datepicker.init(iYear, iMonth, iDay, null);
// where iYear,iMonth and iDay are integers
Но как мне получить целочисленные значения дня, месяца и года увеличенной ДАТЫ на один месяц?
Итак, какие шаги я должен сделать между первыми значениями (строки) и конечными значениями увеличенной даты (целые числа)?
Я предполагаю, что я должен был бы использовать Календарь. Так что мой код должен выглядеть так:
Integer iYear, iMonth, iDay = 0;
String mday = "02";
String mmonth="07";
String myear="2013";
Calendar cal = Calendar.getInstance();
cal.set(Integer.parseInt(myear), Integer.parseInt(mmonth), Integer.parseInt(mday));
cal.add(Calendar.MONTH, 1);
// here I should get the values from cal inside the iYear, iMonth, iDay, but I do not seem to succeed.
DatePicker datepicker = (DatePicker) findViewById(R.id.datePicker1);
datepicker.init(iYear, iMonth, iDay, null);
если я сделаю:
datepicker.init(cal.YEAR, cal.MONTH, cal.DATE, null);
тогда приложение вылетает. Что я должен делать? Как установить это увеличенное на месяц число в мой DatePicker?
ОБНОВЛЕНИЕ Я изменил свой тестовый код на это:
Calendar cal = Calendar.getInstance();
cal.set(2013, 05, 23);
cal.add(Calendar.MONTH, 1);
int xxday = cal.get(Calendar.DATE);
int xxmonth = cal.get(Calendar.MONTH);
int xxyear = cal.get(Calendar.YEAR);
datepicker.init(xxyear, xxmonth, xxday, null);
но теперь datePicker установлен на один месяц от СЕЙЧАС вместо одного месяца с требуемой даты. Итак, вместо (2013-06-23) у меня (2013-09-23). Я полагаю, это из-за
int xxmonth = cal.get(Calendar.MONTH);
как я могу получить реальный месяц из Календаря кал;?
5 ответов
DatePicker
у класса есть метод updateDate(year, month, dayOfMonth)
который вы можете использовать, чтобы установить дату в вашем DatePicker
как показано ниже:
DatePicker datePicker = (DatePicker) findViewById(R.id.datePicker1);
datePicker.updateDate(2016, 5, 22);
Используйте следующий код для инициализации объекта календаря, если у вас есть выбор даты:
Calendar calendar = new GregorianCalendar(datePicker.getYear(),
datePicker.getMonth(),
datePicker.getDayOfMonth());
Остальное жестко закодировать дату частей в конструкторе
Используйте это Tuto для создания вашего DatePickerDialog, затем используйте этот код внутри DatePickerDialog https://developer.android.com/guide/topics/ui/dialogs.html
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
String mday = "02";
String mmonth="07";
String myear="2013";
//convert them to int
int mDay=Integer.valueOf(mday);
int mMonth=Integer.valueOf(mmonth);
int mYear=Integer.valueOf(myear);
return new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker datePicker, int i, int i1, int i2) {
String d=convertToCompletDate(i2,i1,i);
mListener.onDatePicked(d);
}
},mYear,mMonth,mDay);
}
In Kotlin
Предполагая, что ваша дата является строкой. то есть:
var defaultDate = "20/4/2022"
вы могли бы использовать
val datePicker = findViewById<DatePicker>(R.id.date_Picker)
var defaultDate = eventDate.toString().split(Regex("/"))
var dd = defaultDate[0].toInt()
var mm = defaultDate[1].toInt()
var yy = defaultDate[2].toInt()
datePicker.updateDate(yy,mm,dd)