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!") } } }
コメント