标签: rx-binding

RxView.debounce等待debounce的时间才执行命令,如何立即执行命令?

我的 Android 应用程序中有以下代码,试图防止多次单击按钮:

RxView.clicks(bSubmit)
            .debounce(2500, TimeUnit.MILLISECONDS)
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(c -> displayToast());
Run Code Online (Sandbox Code Playgroud)

但此代码的作用不是执行代码,然后防止在同一时间跨度内执行多次点击,而是在去抖时间跨度过去后执行命令。

我怎样才能实现我想要的?

android rx-java rx-binding

2
推荐指数
1
解决办法
954
查看次数

将observable映射到completable时不会调用RxJava2 subscribe

我有一个需要发出网络请求的点击事件.

RxView.clicks(button)
    .flatMapCompletable({ x -> networkCall() })
    .subscribe(...)
Run Code Online (Sandbox Code Playgroud)

点击是一个Observable.
networkCall返回一个Completable.
但是,subscribe当我点击按钮时,内部的块永远不会被调用.

我也试过了

RxView.clicks(button)
    .flatMap({ x -> networkCall().toObservable<Void>() })
    .subscribe(...)
Run Code Online (Sandbox Code Playgroud)

我怎样才能让它工作,以便每次点击按钮时,都会发出一个网络请求,然后在该处理中进行处理subscribe.

编辑:

我还没有做过网络的东西,所以目前只是

public Completable networkCall() {
    Completable.complete();
}
Run Code Online (Sandbox Code Playgroud)

所以它保证完成.

android rx-binding rx-java2

2
推荐指数
1
解决办法
2137
查看次数

rx 函数 Action1 是否已被弃用?

我在我的 Android 应用程序中有一个用例,我希望允许用户在开始搜索之前输入“一定数量”的文本进行搜索。当用户键入附加文本时,我想使用输入的完整文本启动进一步搜索。

在研究了许多选项后,我找到了 Jake WhartonsRxBinding图书馆,并认为这将是一个很好的解决方案

使用这样的代码:-

RxTextView.textChanges(editTextVariableName)
            .debounce(500, TimeUnit.MILLISECONDS)
            .subscribe(new Action1<String>() {
                @Override
                public void call(String value) {
                    // do some work with the updated text
                }
            });
Run Code Online (Sandbox Code Playgroud)

但是我无法导入Action1,上面的代码是否不再有效?我缺少哪个依赖项?

我的 gradle 文件类似于这个

// https://mvnrepository.com/artifact/com.jakewharton.rxbinding2/rxbinding
implementation group: 'com.jakewharton.rxbinding2', name: 'rxbinding', version: '2.1.1'
// https://mvnrepository.com/artifact/com.jakewharton.rxbinding2/rxbinding-appcompat-v7
implementation group: 'com.jakewharton.rxbinding2', name: 'rxbinding-appcompat-v7', version: '2.1.1'
// https://mvnrepository.com/artifact/com.jakewharton.rxbinding2/rxbinding-support-v4
implementation group: 'com.jakewharton.rxbinding2', name: 'rxbinding-support-v4', version: '2.1.1'

// https://mvnrepository.com/artifact/io.reactivex.rxjava2/rxandroid
implementation group: 'io.reactivex.rxjava2', name: 'rxandroid', version: '2.0.2'
// https://mvnrepository.com/artifact/io.reactivex.rxjava2/rxjava
implementation group: 'io.reactivex.rxjava2', name: 'rxjava', …
Run Code Online (Sandbox Code Playgroud)

android rx-binding

2
推荐指数
1
解决办法
2330
查看次数

片段替换后,使用RxJava2 + RxBinding的RecyclerView项目单击不起作用

我在Fragment中有一个RecyclerView,如该SO回答中所述,使用RxJava2处理了项目单击,在非片段中工作正常。

private PublishSubject<Place> itemViewClickSubject = PublishSubject.create();

@Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.search_result_view, parent, false);

        ViewHolder viewHolder = new ViewHolder(view);

        // convert click events into reactive stream
        RxView.clicks(view)
                .takeUntil(RxView.detaches(parent))
                // viewHolder.getPlace() is null until it get bound
                .map(__ -> viewHolder.getPlace())
                .subscribe(itemViewClickSubject);

        return viewHolder;
    }
Run Code Online (Sandbox Code Playgroud)

片段中的RecyclerView只能正常运行一次。在项目单击片段上替换为另一个片段。后按后,出现RecyclerView片段,但单击不再起作用。

如果我删除该.takeUntil(RxView.detaches(parent))行,它将起作用。我认为有必要在RecyclerView未显示(分离)时破坏RxView单击的牢固绑定。我该如何解决这个问题?我正在寻找使用附加/分离事件之一解决问题的方法,任何建议都很棒!谢谢。

android android-fragments android-recyclerview rx-binding rx-java2

1
推荐指数
1
解决办法
2994
查看次数

内部类 ViewHolder 的构造函数只能与包含类的接收者一起调用

我想使用 RxJava2 在 RecyclerView 项目上设置一个监听器。项目是复选框。我想分别听每个项目。所以我得到一个错误内部类 ViewHolder 的构造函数只能用包含类的接收器调用

返回 TraceAdapter.ViewHolder(view)

class TraceAdapter(private var checkList: List<TraceViewModelRow> = listOf()) :
    RecyclerView.Adapter<TraceAdapter.ViewHolder>() {

private val publishSubject = PublishSubject.create<Event>()
val events: Observable<Event> = publishSubject

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TraceAdapter.ViewHolder {
    val view = LayoutInflater.from(parent.context).inflate(R.layout.item_trace_task, parent, false)
    return TraceAdapter.ViewHolder(view)
}

override fun getItemCount(): Int = checkList.size

override fun onBindViewHolder(holder: TraceAdapter.ViewHolder, position: Int) {

    holder.bindTraceList(checkList[position])

}

override fun onViewRecycled(holder: ViewHolder) {
    super.onViewRecycled(holder)
}

inner class ViewHolder(override val containerView: View) : RecyclerView.ViewHolder(containerView), LayoutContainer {

    fun bindTraceList(trace: …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-recyclerview rx-binding rx-java2

1
推荐指数
1
解决办法
1497
查看次数

使用最新的com.jakewharton.rxbinding3:rxbinding:3.0.0-alpha2库时找不到RxTextView和其他小部件

我想在我的项目中将RxJava绑定API用于Android UI小部件。

因此,请遵循本网站' https://github.com/JakeWharton/RxBinding ' 的指导

但是我无法在Kotlin文件中导入任何Android UI小部件。 如果我在Java File中使用这些小部件,那么在哪里工作也很好。 因此,一直没有找到这个问题的实际。

作为参考,以下是在同一项目中使用的gradle文件和类文件(kotlin和Java)

build.gradle

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.0-beta01'
    implementation 'androidx.core:core-ktx:1.2.0-alpha01'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.0-alpha4'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4'
    implementation 'io.reactivex.rxjava2:rxjava:2.2.8'
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
    //RxBinding
    implementation 'com.jakewharton.rxbinding3:rxbinding:3.0.0-alpha2'
}
Run Code Online (Sandbox Code Playgroud)

BindingExample.java类

在此处输入图片说明

RxBindingExample.kt类

在此处输入图片说明

已尝试在SO上探索此问题,但对于lib'com.jakewharton.rxbinding2:rxbinding'的先前版本可用问题或解决方案

android kotlin rx-android rx-binding rx-java2

1
推荐指数
1
解决办法
497
查看次数

使用Kotlin和rx-java combineLatest与表单验证混淆

所以我想用rx-java2进行表单验证.我正在使用Kotlin.我遇到了两个问题.emailObservable和passwordObservable都是类型Disposable!.我尝试通过调用指定类型,val emailObservable: Observable<Boolean>但Android Studio认为它Disposable!.

其次,当我想使用方法时combineLatest出现错误:使用提供的参数不能调用以下任何函数.

emailObservable和passwordObservable都能正常工作.我是rx-java的新手,我对这种类型的东西很困惑.

val emailObservable = RxTextView.afterTextChangeEvents(textEmail)
                .observeOn(AndroidSchedulers.mainThread())
                .map { x -> textEmail.text.length > 3 }
                .subscribe { x -> foo(x) }

val passwordObservable =RxTextView.afterTextChangeEvents(textPassword)
                .observeOn(AndroidSchedulers.mainThread())
                .map { x -> textPassword.text.length > 5 }
                .subscribe { x -> foo(x) }


Observable.combineLatest(emailObservable,
passwordObservable,
BiFunction { x: Boolean, y:Boolean -> x && y })
Run Code Online (Sandbox Code Playgroud)

kotlin rx-java rx-android rx-binding rx-java2

0
推荐指数
1
解决办法
402
查看次数