RxBinding 入门篇

介绍

RxBinding 将 Android 平台中的 UI 控件变为 Observable 对象,将 UI 控件的事件当做 RxJava 中的数据流使用。

GitHub - RxBinding

优点:
  • RxBinding 是对 Android View 事件的扩展,它帮助我们可以对 View 事件使用 RxJava 的各种操作;
  • RxBinding 提供了与 RxJava 一致的回调,简化了代码;
  • 几乎支持所有的常用控件及事件;
  • 支持 Kotlin;

使用

build.gradle 中添加引用:

Platform bindings:

implementation 'com.jakewharton.rxbinding4:rxbinding:4.0.0'

AndroidX library bindings:

implementation 'com.jakewharton.rxbinding4:rxbinding-core:4.0.0'
implementation 'com.jakewharton.rxbinding4:rxbinding-appcompat:4.0.0'
implementation 'com.jakewharton.rxbinding4:rxbinding-drawerlayout:4.0.0'
implementation 'com.jakewharton.rxbinding4:rxbinding-leanback:4.0.0'
implementation 'com.jakewharton.rxbinding4:rxbinding-recyclerview:4.0.0'
implementation 'com.jakewharton.rxbinding4:rxbinding-slidingpanelayout:4.0.0'
implementation 'com.jakewharton.rxbinding4:rxbinding-swiperefreshlayout:4.0.0'
implementation 'com.jakewharton.rxbinding4:rxbinding-viewpager:4.0.0'
implementation 'com.jakewharton.rxbinding4:rxbinding-viewpager2:4.0.0'

Google ‘material’ library bindings:

implementation 'com.jakewharton.rxbinding4:rxbinding-material:4.0.0'
单击
RxView.clicks(dataBinding.btnClick)
        .subscribe(unit -> Toast.makeText(this, "单击"
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了搭建Android MVI框架,可以按照以下步骤进行: 1. 首先,需要在项目的build.gradle文件中添加以下依赖项: ```gradle dependencies { implementation 'io.reactivex.rxjava2:rxjava:2.2.19' implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' implementation 'com.jakewharton.rxbinding2:rxbinding:2.2.0' implementation 'com.jakewharton.rxbinding2:rxbinding-appcompat-v7:2.2.0' implementation 'com.jakewharton.rxbinding2:rxbinding-design:2.2.0' implementation 'com.jakewharton.rxbinding2:rxbinding-recyclerview-v7:2.2.0' implementation 'com.jakewharton.rxbinding2:rxbinding-swiperefreshlayout:2.2.0' implementation 'com.jakewharton.rxrelay2:rxrelay:2.1.0' implementation 'com.google.dagger:dagger:2.27' kapt 'com.google.dagger:dagger-compiler:2.27' implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:adapter-rxjava2:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' implementation 'com.squareup.okhttp3:logging-interceptor:4.9.0' implementation 'com.github.bumptech.glide:glide:4.12.0' kapt 'com.github.bumptech.glide:compiler:4.12.0' } ``` 2. 接下来,需要创建一个基础的MVI架构,包括以下几个部分: - Model:数据模型,用于存储应用程序的数据。 - View:用户界面,用于显示数据和接收用户输入。 - Intent:用户意图,用于描述用户的操作。 3. 在MVI架构中,还需要使用以下几个类: - Action:表示用户的操作,例如点击按钮或滑动屏幕。 - Result:表示操作的结果,例如从服务器获取的数据。 - ViewState:表示View的状态,例如显示数据或显示加载中的进度条。 4. 接下来,需要创建一个基础的MVI架构类,例如: ```kotlin abstract class MviViewModel<I : MviIntent, S : MviViewState, A : MviAction, R : MviResult> : ViewModel() { private val disposables = CompositeDisposable() abstract fun bindIntents() abstract fun actionFromIntent(intent: I): A abstract fun reducer(previousState: S, result: R): S abstract fun initialState(): S private val intentSubject: PublishSubject<I> = PublishSubject.create() private val stateObservable: Observable<S> by lazy { intentSubject .map { actionFromIntent(it) } .compose(actionProcessor) .scan(initialState(), ::reducer) .distinctUntilChanged() .replay(1) .autoConnect(0) } private val actionProcessor = ObservableTransformer<A, R> { actions -> actions.flatMap { action -> handleAction(action) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .doOnError { throwable -> Log.e("MviViewModel", "Error handling action: $action", throwable) } } } private fun handleAction(action: A): Observable<R> { return Observable.empty() } fun processIntents(intents: Observable<I>) { intents.subscribe(intentSubject) .let(disposables::add) } fun states(): Observable<S> = stateObservable override fun onCleared() { super.onCleared() disposables.dispose() } } ``` 5. 最后,需要创建一个具体的ViewModel类,例如: ```kotlin class MyViewModel : MviViewModel<MyIntent, MyViewState, MyAction, MyResult>() { override fun bindIntents() { // TODO: Implement binding of intents to actions } override fun actionFromIntent(intent: MyIntent): MyAction { // TODO: Implement conversion of intent to action } override fun reducer(previousState: MyViewState, result: MyResult): MyViewState { // TODO: Implement state reducer } override fun initialState(): MyViewState { // TODO: Implement initial state } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值