RxAndroid RxBinding 2, 3

RXAndroid

RxAndroid is Android specific bindings for RxJava

RxBinding

RxBinding is binding APIs for Android UI widgets from the platform and support libraries

RxBinding supports UI and RxJava coding

RxJava2 + RxAndroid2 + RxBinding2 Sample

This sample is very simple, just use Button click operation.

Prevent 2 click in 1 second. I provide 2 ways to implement. (RXJava2 only, and RxBinding version)

Preparation (build.gradle)

Add dependencies

buildscript {
    ext.kotlin_version = '1.3.61'
    ext.rxandroid_version = '2.1.1'
    ext.rxjava2_version = '2.2.19'
    ext.rxbinding_version = '2.2.0'
}

Layout (activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="parent">

        <Button
            android:id="@+id/testButton"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Test"/>

    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity.kt

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // RX Binding
        RxView.clicks(testButton)
            .map {

            }
            .throttleFirst(1000, TimeUnit.MILLISECONDS)
            .subscribe {
                Log.d("RX Binding", "Click!")
            }

        // Original RxJava and RxAndroid (Same as above)
        val emitter = PublishSubject.create<View>()
        testButton.setOnClickListener {
            emitter.onNext(it)
        }
        emitter.map {

        }.throttleFirst(1000, TimeUnit.MILLISECONDS)
            .subscribe {
                Log.d("RXAndroid", "Click!")
            }
}

RxJava3 + RxAndroid3 + RxBinding3 Sample

This is RxJava3 version. RxJava2 will be sunset (goes to Long term support now)

Preparation (build.gradle)

buildscript {
    ext.kotlin_version = '1.3.61'

    ext.rxandroid_version = '3.0.0'
    ext.rxjava3_version = '3.0.0'
    ext.rxbinding_version = '3.1.0'
}

Layout (activity_main.xml)

Same as version 2

MainActivity.kt

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        // https://github.com/JakeWharton/RxBinding

        testButton.clicks().map {  }
            .throttleFirst(1000, TimeUnit.MILLISECONDS)
            .subscribe {
                Log.d("RXBinding3", "Click!")
            }

        val emitter = PublishSubject.create<View>()

        testButton.setOnClickListener {
            emitter.onNext(it)
        }
        emitter.map {

        }.throttleFirst(1000, TimeUnit.MILLISECONDS)
            .subscribe {
                Log.d("RXAndroid3", "Click!")
            }
    }
}

Android
スポンサーリンク
Professional Programmer2

コメント