Как использовать dateFormat внутри showDatePickerDialog? Kotlin

Попытался сделать dateFormat полем класса и использовать внутри showDatePickerDialog при смене даты, но использовать его пытаюсь вместо склеивания строки. Не получилось реализовать задуманное, надеюсь на вашу помощь. Прилагаю исходник без своего вмешательства:

class DataActivity : AppCompatActivity() {

    private val calendar: Calendar = Calendar.getInstance()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_data)

        val date = SimpleDateFormat("dd.MM.yyyy")
        val dateDefault = date.format(calendar.timeInMillis)
        editDate.setText(dateDefault)

        editDate.setOnClickListener {
            showDatePickerDialog()
        }
    }

    private fun showDatePickerDialog() {
        val datePickerDialog = DatePickerDialog(
            this@NewItemActivity,
            { _, year, monthOfYear, dayOfMonth ->
                val selectedDate: String =
                    dayOfMonth.toString() + "." + (monthOfYear + 1) + "." + year
                editDate?.setText(selectedDate)
            },
            calendar.get(Calendar.YEAR),
            calendar.get(Calendar.MONTH),
            calendar.get(Calendar.DAY_OF_MONTH)
        )
        datePickerDialog.datePicker.maxDate = calendar.timeInMillis
        datePickerDialog.show()
    }
}

EDIT:

class DataActivity : AppCompatActivity() {

    private val simpleDateFormat: DateFormat = DateFormat.getDateInstance()

    private val calendar: Calendar = Calendar.getInstance()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_data)

        val date = simpleDateFormat
        val dateDefault = date.format(calendar.timeInMillis)
        editDate.setText(dateDefault)

        editDate.setOnClickListener {
            showDatePickerDialog()
        }
    }

    private fun showDatePickerDialog() {
        val datePickerDialog = DatePickerDialog(
            this@NewItemActivity,
            { _, year, monthOfYear, dayOfMonth ->
                val selectedDate: String =
                    dayOfMonth.toString() + "." + (monthOfYear + 1) + "." + year
                editDate?.setText(selectedDate)
            },
            calendar.get(Calendar.YEAR),
            calendar.get(Calendar.MONTH),
            calendar.get(Calendar.DAY_OF_MONTH)
        )
        datePickerDialog.datePicker.maxDate = calendar.timeInMillis
        datePickerDialog.show()
    }
}

Ответы (1 шт):

Автор решения: Vadik

Во-первых, предлагаю завести еще одну проперти maxDate, чтобы зафиксировать максимальную возможную дату в календаре:

private val calendar = Calendar.getInstance()
private val dateFormat = DateFormat.getDateInstance()
private val maxDate = calendar.timeInMillis

Тогда инстанс calendar мы будем использовать для хранения текущей выбранной даты в календаре. Заиспользуем maxDate в методе onCreate:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_data)
    editDate.setText(dateFormat.format(maxDate))
    editDate.setOnClickListener {
        showDatePickerDialog()
    }
}

И, наконец, поправим реализацию showDatePickerDialog, чтобы в коллбеке обновлялся календарь, форматировалась дата и выставлялся правильный maxDate:

private fun showDatePickerDialog() {
    val datePickerDialog = DatePickerDialog(
        this,
        { _, year, month, day ->
            calendar.set(year, month, day)
            editDate.setText(dateFormat.format(calendar.timeInMillis))
        },
        calendar.get(Calendar.YEAR),
        calendar.get(Calendar.MONTH),
        calendar.get(Calendar.DAY_OF_MONTH)
    )
    datePickerDialog.datePicker.maxDate = maxDate
    datePickerDialog.show()
}
→ Ссылка