在我的用户界面中,我有一个RadioGroup和一个“正常”的RadioButtons
当用户单击Button时,我想读取所选的Button以对其进行处理。

RxView.clicks(button)
      .flatMap(x -> RxRadioGroup.checkedChanges(radioGroup_timer))
      .map(view -> {
          switch (view) {
              case R.id.radioButton_10sec_timer:
                  return 10;
              case R.id.radioButton_20sec_timer:
                  return 20;
              default:
                  return DEFAULT_TIMER;
          }
      })
    .subscribe(duration -> Timber.i("duration: %,d",duration));

到目前为止,它仍然有效,但现在每当用户选择另一个RadioButton时,我就会收到一条新的日志消息。
是否有方法读取当前选定的RadioButton而不订阅更改?

最佳答案

做这种事

RxView.clicks(button)
      .withLatestFrom(RxRadioGroup.checkedChanges(radioGroup_timer), (click, checked) -> checked)
      .map(...)

WithLatestFrom将只从checkedChanges流中获取最新元素,FlatMap将创建新的Observable,它将从该流中发出所有项

10-08 18:09