Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android RX绑定日期选择器和时间选择器_Android_Kotlin_Rx Binding - Fatal编程技术网

Android RX绑定日期选择器和时间选择器

Android RX绑定日期选择器和时间选择器,android,kotlin,rx-binding,Android,Kotlin,Rx Binding,我试图从DatePicker获取值,但我不知道如何管理它 我的布局包含一个DatePicker元素,我使用的是kotlin 计时器也有同样的问题。你能更具体一点吗?是否要向用户显示日期选择器和时间选择器,并获取用户选择的值?那样的话,你可以这样试试。 对于日期选择器 val mCalendar = Calendar.getInstance() val mYear = mCalendar.get(Calendar.YEAR) val mMonth = mCalendar.get(Calendar.

我试图从DatePicker获取值,但我不知道如何管理它

我的布局包含一个DatePicker元素,我使用的是kotlin


计时器也有同样的问题。

你能更具体一点吗?是否要向用户显示日期选择器和时间选择器,并获取用户选择的值?那样的话,你可以这样试试。 对于日期选择器

val mCalendar = Calendar.getInstance()
val mYear = mCalendar.get(Calendar.YEAR)
val mMonth = mCalendar.get(Calendar.MONTH)
val mDay = mCalendar.get(Calendar.DAY_OF_MONTH)

val dpd = DatePickerDialog(
      this, DatePickerDialog.OnDateSetListener { _, thisYear, thisMonth, thisDay ->

    mYear = thisYear
    mMonth = thisMonth
    mDay = thisDay

    tDate.text = mDay.toString() + "/" + (mMonth + 1).toString() +
        "/" + mYear.toString()

  }, mYear, mMonth, mDay
  )
  dpd.show()
对于时间选择器

TimePickerDialog(this, TimePickerDialog.OnTimeSetListener { _, hourOfDay, minute ->
tvHour.text = Calendar.HOUR_OF_DAY, hourOfDay
tvMinute.text = Calendar.MINUTE, minute
}, mCalendar.get(Calendar.HOUR_OF_DAY), mCalendar.get(Calendar.MINUTE), false).show()
谢谢你

这个助手类对日期选择器和时间选择器都有神奇的作用:

data class DatePickerChangeEvent(
        val view: View,
        val year: Int = 0,
        val monthOfYear: Int = 0,
        val dayOfMonth: Int = 0
)

data class TimePickerChangeEvent(
        val view: View,
        val hour: Int,
        val minute: Int
)

 class DatePickerObservable(val view: DatePicker, val year: Int, val monthOfYear: Int, val dayOfMonth: Int)
    : io.reactivex.Observable<DatePickerChangeEvent>() {

    override fun subscribeActual(observer: Observer<in DatePickerChangeEvent>) {
        val listener = DateChangeListener(view, observer)
        observer.onSubscribe(listener)
        view.init(year, monthOfYear, dayOfMonth, listener)
    }

    class DateChangeListener(private val dp: DatePicker, private val obs: io.reactivex.Observer<in DatePickerChangeEvent>)
        : DatePicker.OnDateChangedListener, MainThreadDisposable() {

        override fun onDateChanged(p0: DatePicker, p1: Int, p2: Int, p3: Int) {
            obs.onNext(DatePickerChangeEvent(dp, p1, p2, p3))
        }

        override fun onDispose() {
        }
    }
}

class TimePickerObservable(val view: TimePicker)
    : io.reactivex.Observable<TimePickerChangeEvent>() {

    override fun subscribeActual(observer: Observer<in TimePickerChangeEvent>) {
        val listener = TimeChangeListener(view, observer)
        observer.onSubscribe(listener)
        view.setOnTimeChangedListener(listener)
    }

    class TimeChangeListener(private val tp: TimePicker, private val obs: io.reactivex.Observer<in TimePickerChangeEvent>)
        : TimePicker.OnTimeChangedListener, MainThreadDisposable() {

        override fun onTimeChanged(p0: TimePicker, p1: Int, p2: Int) {
            obs.onNext(TimePickerChangeEvent(p0, p1, p2))
        }

        override fun onDispose() {
            tp.setOnTimeChangedListener { timePicker, i, i2 -> }
        }
    }
}

@Suppress("NOTHING_TO_INLINE")
inline fun DatePicker.dateChange(year: Int, monthOfYear: Int, dayOfMonth: Int): DatePickerObservable =
        DatePickerObservable(this, year, monthOfYear, dayOfMonth)

@Suppress("NOTHING_TO_INLINE")
inline fun TimePicker.timeChange(): TimePickerObservable =
        TimePickerObservable(this)

我的XML文件包含一个元素。在RxBinding中,我通常使用这样的东西:RxView.cliksbutton.map{it}.subscribe{navigateTotherfragment}我在寻找类似的东西。对不起,伙计,我只是误解了这个问题。您正在询问RX绑定选择器。
 datePicker.dateChange(2018,9,15)
                .subscribe{
                    Log.d("RxDate", it.toString())
                }