TimePickerFragment.kt を作成し、MainActivity.kt で使用します。
時刻を選択したらテキストビューに選択した時刻を表示しています。
package com.example.sampledatetimepickerdialog
import android.app.Dialog
import android.app.TimePickerDialog
import android.content.Context
import android.os.Bundle
import android.widget.TimePicker
import androidx.fragment.app.DialogFragment
import java.util.*
class TimePickerFragment : DialogFragment(), TimePickerDialog.OnTimeSetListener { // *1
interface Listener {
fun onSetTime(hour: Int, minute: Int)
}
private lateinit var listener: Listener
override fun onAttach(context: Context) { // *2
super.onAttach(context)
when {
parentFragment is TimePickerFragment -> listener = parentFragment as Listener
context is Listener -> listener = context
}
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val calendar = Calendar.getInstance()
val hour = calendar.get(Calendar.HOUR)
val minute = calendar.get(Calendar.MINUTE)
return TimePickerDialog(activity, this, hour, minute, true) // *3
}
override fun onTimeSet(p0: TimePicker?, hourOfDay: Int, minute: Int) { // *4
listener.onSetTime(hourOfDay, minute)
}
}
package com.example.sampledatetimepickerdialog
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.sampledatetimepickerdialog.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity(), TimePickerFragment.Listener { // *1
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.btnTimePicker.setOnClickListener { // *2
val timePicker = TimePickerFragment()
timePicker.show(supportFragmentManager, "Time picker dialog")
}
}
override fun onSetTime(hour: Int, minute: Int) { // *3
val h = hour.toString().padStart(2, '0')
val m = minute.toString().padStart(2, '0')
val str = "$h:$m"
binding.txvSample.text = str
}
}