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);

Календарный месяц основан на 0. Итак, месяц 07 - август.

Используйте следующий код для инициализации объекта календаря, если у вас есть выбор даты:

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)
Другие вопросы по тегам