0

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.

1 Answer 1

1

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())
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.