gpt4 book ai didi

android - kotlin 中的 Observable.combineLatest 类型推断

转载 作者:IT老高 更新时间:2023-10-28 13:29:26 25 4
gpt4 key购买 nike

我在我的项目中使用 RxJava2、Kotlin-1.1 和 RxBindings。

我有一个简单的登录屏幕,默认情况下禁用“登录”按钮,我只想在用户名和密码编辑文本字段不为空时启用该按钮。

LoginActivity.java

Observable<Boolean> isFormEnabled =
Observable.combineLatest(mUserNameObservable, mPasswordObservable,
(userName, password) -> userName.length() > 0 && password.length() > 0)
.distinctUntilChanged();

我无法将上述代码从 Java 翻译成 Kotlin:

LoginActivity.kt

class LoginActivity : AppCompatActivity() {

val disposable = CompositeDisposable()

private var userNameObservable: Observable<CharSequence>? = null
private var passwordObservable: Observable<CharSequence>? = null

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
initialize()
}

fun initialize() {
userNameObservable = RxTextView.textChanges(username).skip(1)
.debounce(500, TimeUnit.MILLISECONDS)
passwordObservable = RxTextView.textChanges(password).skip(1)
.debounce(500, TimeUnit.MILLISECONDS)
}

private fun setSignInButtonEnableListener() {
val isSignInEnabled: Observable<Boolean> = Observable.combineLatest(userNameObservable,
passwordObservable,
{ u: CharSequence, p: CharSequence -> u.isNotEmpty() && p.isNotEmpty() })
}
}

我认为这与 combinelatest 中第三个参数的类型推断有关,但我没有通过阅读错误消息正确解决问题: Type Inference issue

最佳答案

您的问题是编译器无法确定要调用 combineLatest 的哪个覆盖,因为多个将功能接口(interface)作为其第三个参数。您可以使用这样的 SAM 构造函数进行显式转换:

val isSignInEnabled: Observable<Boolean> = Observable.combineLatest(
userNameObservable,
passwordObservable,
BiFunction { u, p -> u.isNotEmpty() && p.isNotEmpty() })

附言。感谢您提出这个问题,它帮助我发现我最初对这个问题错了,结果证明是同一个问题,我现在也用这个解决方案更新了这个问题。 https://stackoverflow.com/a/42636503/4465208

关于android - kotlin 中的 Observable.combineLatest 类型推断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42725749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com