用Rxjava kotlin类初始化屏幕后,错过了拳头按钮单击

问题描述

我在 Android 应用程序中将 RxJava Kotlin 一起使用。避免使用 throttleFirst 方法对我在Rxava上按如下方式处理的按钮多次单击。

compositedisposable = new Compositedisposable();

@OnClick(R.id.f1rst_button)
fun onFirstButtonClick(view: View) {
    Log.d("capture click event started")
    compositedisposable.add(RxView.clicks(view).throttleFirst(500,TimeUnit.MILLISECONDS,AndroidSchedulers.mainThread())
            .subscribe {
                Log.d("capture click event accepted")
               performFirstButtonClick()
            })
}

但是,始终是,屏幕初始化后缺少第一次单击按钮。从第2次点击开始,其工作正常。 例如:启动屏幕->等待屏幕加载->单击按钮,然后等待操作->在此触发按钮单击事件并在日志语句Log.d("capture click event started")中打印。但是performFirstButtonClick()不会被触发,并且在加载屏幕后第一次也不会打印相应的日志。 请让我知道我是否做错了(或任何其他解决方案)。

More Info :为了提供更多信息,我正在对此进行编辑。 此按钮在DialogFragment中。 流程如下 开始的活动A

->在按钮上单击活动A ,启动活动B (其中包含具有表格 WebView >)

用户通过 JavascriptInterfaceBridge 活动B 中单击表单中的表单时,将打开

-> 活动C 。 >

-> 活动C 包含一个按钮( onFirstButtonClick )。

活动A和活动B是 Java 文件,活动C是 kotlin 文件。问题与活动C 中的按钮有关。

解决方法

首先,在每次单击按钮时创建新的RX订阅,这是不必要的。 只需在点击侦听器上设置视图创建(例如,onCreate())后,就无需在此处使用ButterKnife

RxView.clicks(view)
       .subscribeOn(Schedulers.io())
       .observeOn(AndroidSchedulers.mainThread())
       .subscribe{
       // Handle click listener
}.also { 
 // Just once add subscription to Composite Disposable container
 compositeDisposable.add(it) 
}

第二件事,如果要避免多次连续单击,建议操作员对.debounce(400,TimeUnit.MILLISECONDS)进行反跳。使用此运算符,您可以在多次点击之间限制点击次数。