Как использовать 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()
}