Home > OS >  DatePicker dialog may showing improper date in kotlin
DatePicker dialog may showing improper date in kotlin

Time:11-26

Below is the function I am using to diplay date picker dialog in android.

private fun openPurchaseDatePickerDialog(
    yearToDisplay: Int,
    monthToDisplay: Int,
    dayToDisplay: Int
) {
    try {
        activity?.let { KeyboardUtils.hideKeyboard(it) }
        val calendar = Calendar.getInstance()
        val dialog = DatePickerDialog(activity, { _, year, month, day_of_month ->
            calendar[Calendar.YEAR] = year
            calendar[Calendar.MONTH] = month
            calendar[Calendar.DAY_OF_MONTH] = day_of_month
            val myFormat = ""   DateUtils.OverAllAppDateDisplayFormat
            val sdf = SimpleDateFormat(myFormat, Locale.getDefault())
            edtPurchaseDate.setText(sdf.format(calendar.time).toString())
            spIntendedUse.isFocusable = true
        }, yearToDisplay, monthToDisplay, dayToDisplay)
        dialog.updateDate(yearToDisplay,monthToDisplay,dayToDisplay)
        dialog.datePicker.maxDate = calendar.timeInMillis
        dialog.show()
    } catch (e: Exception) {
        e.printStackTrace()
    }

As above you can check that there are three arguments passed in this function.

I have to show the specific date in DatePicker dialog show I have passed this three parameters.

Means If User selected the date first time the default values will be set or the current date will be set.

If edittext has already a text selected and not empty am doing as below :

if (edtPurchaseDate.text.toString().isNullOrEmpty()) {
                        val calendar = Calendar.getInstance()
                        openPurchaseDatePickerDialog(
                            calendar[Calendar.YEAR],
                            calendar[Calendar.MONTH],
                            calendar[Calendar.DAY_OF_MONTH]
                        )
                    } else {
                        var dateArr = edtPurchaseDate.text.toString().split("-")
                        openPurchaseDatePickerDialog(
                            dateArr[2].toInt(),
                            dateArr[1].toInt(),
                            dateArr[0].toInt()
                        )
                    }

But Still when the date picker dialogs opens its displaying the selected as as today instead of custom.

What might be the issue?

You can see I have also tried with updateDate() function as below :

dialog.updateDate(yearToDisplay,monthToDisplay,dayToDisplay)

Thanks.

CodePudding user response:

Not completely sure about the updateDate method issue here . But to fix this you can use same Calendar object during initialization it should work fine . i have modified your method a bit .

private fun openPurchaseDatePickerDialog(date: String) {
    try {
        val calendar = Calendar.getInstance()
        if (date.isNotBlank()) {
           try {
               calendar.time = SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()).parse(date)!!
           }catch (e:ParseException){
           }
        }
        val dialog = DatePickerDialog(this, { _, year, month, day_of_month ->
            calendar[Calendar.YEAR] = year
            calendar[Calendar.MONTH] = month
            calendar[Calendar.DAY_OF_MONTH] = day_of_month
            val myFormat = "dd-MM-yyyy"
            val sdf = SimpleDateFormat(myFormat, Locale.getDefault())
            edtPurchaseDate.setText(sdf.format(calendar.time).toString())
        }, calendar[Calendar.YEAR], calendar[Calendar.MONTH], calendar[Calendar.DAY_OF_MONTH])
        dialog.datePicker.maxDate = System.currentTimeMillis()
        dialog.show()
    } catch (e: Exception) {
        e.printStackTrace()
    }
}

Now when you call it you just call it with a value you do mnot have to split String.

openPurchaseDatePickerDialog(edtPurchaseDate.text.toString())
  • Related