6
respostas

Implementando o DatePickerDialog

Como implementar esse método porém para uma seleção de hora ?

val ano = 2019
    val mes = 5
    val dia = 2

    val hoje: Calendar = Calendar.getInstance()

    val datadesejada: TextView = main_data

    datadesejada.text = hoje.formataParaBrasileiro()
    datadesejada.setOnClickListener {
        DatePickerDialog(this,
            DatePickerDialog.OnDateSetListener { view, ano, mes, dia ->
                val dataselecionada = Calendar.getInstance()
                dataselecionada.set(ano, mes, dia)
                datadesejada.setText(dataselecionada.formataParaBrasileiro())
            }
            , ano, mes, dia)
            .show()
    }

Realizar a seleção com uma tela parecida com a do link: https://www.wikihow.com/images_en/thumb/a/a7/Set-an-Alarm-on-an-iPhone-Clock-Step-6-Version-3.jpg/v4-728px-Set-an-Alarm-on-an-iPhone-Clock-Step-6-Version-3.jpg

6 respostas

Oi Eduardo, tudo bem?

Para isso temos o TimePickerDialog, a implementação é similar mudando apenas os valores para os argumentos durante a chamada, segue o exemplo:

public TimePickerDialog (Context context, 
                TimePickerDialog.OnTimeSetListener listener, 
                int hourOfDay, 
                int minute, 
                boolean is24HourView)

[]s

Ficaria assim então ?

fun Calendar.formatahora() : String {
            val formatohora = "HH:mm"
            val format = SimpleDateFormat(formatohora)
            val horaformatada = format.format(this.time)
            return horaformatada
        }

        val hora = 13
        val minuto = 30

        val horaatual: Calendar = Calendar.getInstance()

        val horadesejada: TextView = main_hora

        horadesejada.text = horaatual.formatahora()
        horadesejada.setOnClickListener {
            TimePickerDialog(this,
                TimePickerDialog.OnTimeSetListener { view, hora, minuto ->
                    val horaSelecionada = Calendar.getInstance()
                    horaSelecionada.set(hora, minuto)
                    horadesejada.setText(horaSelecionada.formatahora())

                }
                , hora, minuto, true)
                .show()
        }

Percebi que dessa forma não está passando a data que é selecionada para o textview, está sendo mantido a hora atual. Alem disso, se a seleção for maior que 17 da um erro.

2019-06-17 23:00:02.839 17737-17737/com.example.cleanpass E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.cleanpass, PID: 17737
    java.lang.ArrayIndexOutOfBoundsException: length=17; index=20
        at java.util.Calendar.internalSet(Calendar.java:1840)
        at java.util.Calendar.set(Calendar.java:1864)
        at com.example.cleanpass.ui.activity.Main$onCreate$5$1.onTimeSet(Main.kt:79)
        at android.app.TimePickerDialog.onClick(TimePickerDialog.java:172)
        at android.app.TimePickerDialog$1.onClick(TimePickerDialog.java:154)
        at android.view.View.performClick(View.java:6597)
        at android.view.View.performClickInternal(View.java:6574)
        at android.view.View.access$3100(View.java:778)
        at android.view.View$PerformClick.run(View.java:25885)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

Tem como realizar alterações de layout no DatePickerDialog e TimePickerDialog?

Encentrei aonde fica o Layout, teria algum problema converter o layout e editar ?

Oi Eduardo

Para que passe a data e hora você vai ter que chamar o TimePickerDialog dentro do listener do DatePickerDialog, então, no listener do TimePickerDialog você pega os valores do listener de ambos os dialogs e cria a data esperada.

Você pode ajustar o layout conforme desejar :)

opa, escrevi errado, Percebi que dessa forma não está passando a hora que é selecionada para o textview, está sendo mantido a hora atual do aparelho. Alem disso, se a seleção for maior que 17 da um erro.