RxJava binding APIs for Android's UI widgets.

Overview

RxBinding

RxJava binding APIs for Android UI widgets from the platform and support libraries.

Download

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'

Snapshots of the development version are available in Sonatype's snapshots repository.

License

Copyright (C) 2015 Jake Wharton

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Comments
  • Script to generate kotlin bindings.

    Script to generate kotlin bindings.

    The Kotlin bindings are fun, but are completely mechanical in how they are created. There's no reason they should be created by hand and doing so is an error-prone endeavor. Write a script that parses the Java declarations and automatically generates them for all modules. Care must be taken for all the variations of things like Javadoc, generics, and multiple arguments.

    opened by JakeWharton 22
  • Inheritance vs. enums for event differentiation.

    Inheritance vs. enums for event differentiation.

    There's currently two patterns for events that have multiple "actions" associated with them (for lack of a better term):

    • Subclass a common event type: AbstractFooEvent + FirstFooEvent + SecondFooEvent
    • Put an enum on a single event type: FooEvent with FooEvent.Kind enum and property.

    Which of these do we want to standardize on?

    Subclassing feels gross since the more specific types do not add any more information to the event (note: counter example below) and add multiple types to the public API, but it also allows RxJava's filter+cast operator ofType to be used. Putting an inner-enum on a single event type keeps the public API small and we could change these to implement Func1<EventType, Boolean> for use as a filter (e.g., .filter(FooEvent.Kind.FIRST)).

    question 
    opened by JakeWharton 19
  • Allow HandlerScheduler to run immediately if on the correct thread

    Allow HandlerScheduler to run immediately if on the correct thread

    Great to see the ideas in this project! I wanted to submit one more idea for feedback:

    By default, the HandlerScheduler always calls postDelayed, even if delayTime <= 0 && Looper.myLooper() == handler.getLooper().

    I've found it useful to have a scheduler that behaves more like Schedulers.immediate() in this scenario. The main benefits are immediate execution with no delay (nothing to schedule) and preservation of the call stack when debugging.

    There's already enough hooks to swap out the default scheduler, but I'd be curious to see if anybody else finds this idea valuable and if it would be reasonable to make it the default behavior.

    opened by zpinter 19
  • RxTextView.textChanges emits mutable CharSequence

    RxTextView.textChanges emits mutable CharSequence

    
    RxTextView.textChanges(searchEditText)
              .delay(2, TimeUnit.SECONDS)
              .subscrite(
                  ret -> {}
              )
    

    I bind the text changes event with a edittext widget. When I input some text to the edittext quickly, the ret always be the string that is the final text I writing. I think it's wrong.

    In my opinion, the ret will be the sequences which I write.

    documentation 
    opened by simpleton 14
  • Upgrade to androidx

    Upgrade to androidx

    The android x libraries are currently at release candidate versions so I figured it'd be a good time to discuss this. Hopefully migrating RxBinding will just involve a whole lot of renaming of imports, but what will this mean for the version number? This is technically a breaking change for some of the modules, so does this mean we change to 3.0?

    Happy to some some legwork here, I just want to know how this should be approached. Are there any other considerations when migrating? Or is the plan to just let Jetifier handle things for now?

    opened by chris-horner 13
  • TabLayout selections has an error

    TabLayout selections has an error

    @JakeWharton Calling TabLayout's selections will cause an error. How can I fix this?

    Version: rxbinding:3.0.0-alpha2

    Code:

            tab_layout
                    .selections()
                    .compose(bindUntilEvent(FragmentEvent.DESTROY_VIEW))
                    .subscribe {
                        when (it.position) {
                            0 -> setFabIcon(R.drawable.ic_fab_create_black_24dp)
                            1 -> setFabIcon(R.drawable.ic_person_add_black_24dp)
                            2 -> floating_action_button.hide()
                            3 -> floating_action_button.hide()
                        }
                    }.isDisposed
    
            <com.google.android.material.tabs.TabLayout
                android:id="@+id/tab_layout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:tabMaxWidth="0dp"
                app:tabGravity="fill"
                app:tabMode="scrollable" />
    

    Error:

        io.reactivex.exceptions.UndeliverableException: The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the exception has nowhere to go to begin with. Further reading: https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling | java.lang.ClassCastException: com.jakewharton.rxbinding3.material.TabLayoutSelectionsObservable$Listener cannot be cast to com.google.android.material.tabs.TabLayout$BaseOnTabSelectedListener
            at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:367)
            at io.reactivex.Observable.subscribe(Observable.java:12097)
            at io.reactivex.Observable.subscribe(Observable.java:12076)
            at io.reactivex.Observable.subscribe(Observable.java:11979)
    
    needs info 
    opened by tcqq 12
  • Binding for RecyclerView's Adapter

    Binding for RecyclerView's Adapter

    I had to change the generated RxRecyclerViewAdapter.kt manualy to fix recyclerview-v7-kotlin build since KotlinGenTask doesnt seem to support nested levels of parameterized types. I'm not familiar with kotlin and groovy, but i will continue looking at fixing kotlin generated code for this but thought i would start with this PR first.

    opened by chemouna 10
  • Weird D8 issue with Jetifier Enabled (Invoke-customs)

    Weird D8 issue with Jetifier Enabled (Invoke-customs)

    I'm using rxbinding 2.2.0 with Kotlin 1.2.71 and AS 3.2.0 with Jetifier enabled (using the gradle kotlin dsl). When I build, I get the following error:

    > Task :app:transformClassesWithDexBuilderForDebug
    com.android.builder.dexing.DexArchiveBuilderException: com.android.builder.dexing.DexArchiveBuilderException: Failed to process /home/eli/.gradle/caches/transforms-1/files-1.1/jetified-rxbinding-2.2.0.aar/cbeb1358418963ecc6ffac36248ae851/jars/classes.jar
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    	at java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:593)
    	at java.util.concurrent.ForkJoinTask.reportException(ForkJoinTask.java:677)
    	at java.util.concurrent.ForkJoinTask.join(ForkJoinTask.java:720)
    	at com.android.ide.common.internal.WaitableExecutor.waitForTasksWithQuickFail(WaitableExecutor.java:146)
    	at com.android.build.gradle.internal.transforms.DexArchiveBuilderTransform.transform(DexArchiveBuilderTransform.java:405)
    	at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:239)
    	at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:235)
    	at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102)
    	at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:230)
    	at sun.reflect.GeneratedMethodAccessor1005.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
    	at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:50)
    	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
    	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:131)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
    	at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:120)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77)
    	at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
    	at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
    	at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
    	at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
    	at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
    	at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
    	at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
    	at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
    	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
    	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
    	at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
    	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.run(EventFiringTaskExecuter.java:51)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
    	at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46)
    	at org.gradle.execution.taskgraph.LocalTaskInfoExecutor.execute(LocalTaskInfoExecutor.java:42)
    	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:277)
    	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:262)
    	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:135)
    	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:130)
    	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.execute(DefaultTaskPlanExecutor.java:200)
    	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.executeWithWork(DefaultTaskPlanExecutor.java:191)
    	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.run(DefaultTaskPlanExecutor.java:130)
    	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
    	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
    	at java.lang.Thread.run(Thread.java:745)
    Caused by: com.android.builder.dexing.DexArchiveBuilderException: Failed to process /home/eli/.gradle/caches/transforms-1/files-1.1/jetified-rxbinding-2.2.0.aar/cbeb1358418963ecc6ffac36248ae851/jars/classes.jar
    	at com.android.build.gradle.internal.transforms.DexArchiveBuilderTransform.launchProcessing(DexArchiveBuilderTransform.java:900)
    	at com.android.build.gradle.internal.transforms.DexArchiveBuilderTransform.lambda$convertToDexArchive$6(DexArchiveBuilderTransform.java:825)
    	at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1424)
    	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
    	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
    	at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
    	at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
    Caused by: com.android.builder.dexing.DexArchiveBuilderException: Error while dexing.
    The dependency contains Java 8 bytecode. Please enable desugaring by adding the following to build.gradle
    android {
        compileOptions {
            sourceCompatibility 1.8
            targetCompatibility 1.8
        }
    }
    See https://developer.android.com/studio/write/java8-support.html for details. Alternatively, increase the minSdkVersion to 26 or above.
    
    	at com.android.builder.dexing.D8DexArchiveBuilder.getExceptionToRethrow(D8DexArchiveBuilder.java:124)
    	at com.android.builder.dexing.D8DexArchiveBuilder.convert(D8DexArchiveBuilder.java:101)
    	at com.android.build.gradle.internal.transforms.DexArchiveBuilderTransform.launchProcessing(DexArchiveBuilderTransform.java:895)
    	... 6 more
    Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete
    	at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:65)
    	at com.android.tools.r8.utils.ExceptionUtils.withD8CompilationHandler(ExceptionUtils.java:43)
    	at com.android.tools.r8.D8.run(D8.java:90)
    	at com.android.builder.dexing.D8DexArchiveBuilder.convert(D8DexArchiveBuilder.java:99)
    	... 7 more
    Caused by: com.android.tools.r8.utils.AbortException: Error: Invoke-customs are only supported starting with Android O (--min-api 26)
    	at com.android.tools.r8.utils.Reporter.failIfPendingErrors(Reporter.java:116)
    	at com.android.tools.r8.utils.Reporter.fatalError(Reporter.java:74)
    	at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:59)
    	... 10 more
    
    
    > Task :app:transformClassesWithDexBuilderForDebug FAILED
    
    FAILURE: Build failed with an exception.
    
    * What went wrong:
    Execution failed for task ':app:transformClassesWithDexBuilderForDebug'.
    > com.android.build.api.transform.TransformException: com.android.builder.dexing.DexArchiveBuilderException: com.android.builder.dexing.DexArchiveBuilderException: Failed to process /home/eli/.gradle/caches/transforms-1/files-1.1/jetified-rxbinding-2.2.0.aar/cbeb1358418963ecc6ffac36248ae851/jars/classes.jar
    
    * Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
    
    * Get more help at https://help.gradle.org
    
    
    opened by eygraber 9
  • RxTextInputLayout-kotlin should accept CharSequence?

    RxTextInputLayout-kotlin should accept CharSequence?

    https://github.com/JakeWharton/RxBinding/blob/master/rxbinding-design-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/design/widget/RxTextInputLayout.kt#L28

    Not using CharSequence? means the error cannot be unset via a null value, as per the documentation.

    opened by burntcookie90 9
  • Use KotlinPoet for Kotlin code gen

    Use KotlinPoet for Kotlin code gen

    This PR switches the Kotlin code gen to use KotlinPoet rather than the manual approach. KotlinPoet's in a good place for this now, so I figured it would be a good opportunity to exercise it!

    Commits are small-ish and broken down to digestible units, but don't all compile on their own. Tried to make this as CR-friendly as possible, and only the last commit actually regenerates the kotlin files.

    Some notes:

    • kotlinOptions.moduleName no longer exists, and I couldn't find any docs on what happened with it. Removed as part of upgrading in 1b594dc.
    • JavaParser doesn't yield fully qualified class names for types. This was sort of ok in the previous implementation because we'd manually add all the imports from the target class to the kotlin file anyway. We can't just tack on imports in KotlinPoet though, so this tries to be smarter about it, albeit in a sort of unfortunate way. To do this, I read the imports first and associate them into a mapping of simple name -> ClassName, which I then pass around in the type resolution to give it a chance. The idea is that if it's referenced by simple name in the target class and safe with imports, then we can do the same in the kotlin files. In testing, this proved to work fine.
    • JavaParser has seen a lot of updates and we're a major version behind. Looks like there are breaking changes too, so just updated to the last 2.x version here. We don't really need the new stuff fortunately, and the newer versions don't help with the fqcn issue above either anyway.
    • KotlinPoet doesn't put newlines between fun emissions 🤔
    opened by ZacSweers 8
  • verifyMainThread() checks in RxJava 2 variants don't go to onError

    verifyMainThread() checks in RxJava 2 variants don't go to onError

    Note sure if this is by design or not, but the exceptions thrown by verifyMainThread() fail hard rather than going to onError() (since it doesn't know the disposed state during the calling subscribe and will just bubble it straight to RxJavaPlugins#onError() or throw. Since we have the observer there, should we send the exception to its onError() instead?

    Specifically, I think this is actually a significant behavior change from the implementation in RxJava 1 or using create(), which would send this to onError().

    Result is if you want to gracefully handle that case, you end up having to try/catch the actual subscribe() call itself

    opened by ZacSweers 8
  • Only remove focus change listener when it is `this`

    Only remove focus change listener when it is `this`

    Currently, the onFocusChangeListener is always set to null when disposed, regardless of what the field is actually set to.
    This could lead to some unexpected behavior when the focus change listener is changed manually, after subscribing to the observable.

    When we first check that the currently set listener is this, then won't override any manually set listener.

    opened by mfederczuk 1
  • Bug in comment for TextView.editorActions(handled: (Int) -> Boolean = AlwaysTrue)

    Bug in comment for TextView.editorActions(handled: (Int) -> Boolean = AlwaysTrue)

    The comment states that:

     * @param handled Predicate invoked each occurrence to determine the return value of the
     * underlying [TextView.OnEditorActionListener].
    

    But the code seems to use the handler predicate to filter the events and always returns true when the event is sent to the observer:

          try {
            if (!isDisposed && handled(actionId)) {
              observer.onNext(actionId)
              return true
            }
          } catch (e: Exception) {
            observer.onError(e)
            dispose()
          }
    
          return false
    

    Perhaps two predicates? One for the filtering and one for the return value.

    Or at least a fix for the comment.

    The same issue is found in TextView.editorActionEvents.

    opened by hetoug 0
  • Observable to track visibility changes

    Observable to track visibility changes

    I see that there is a consumer to set the view's visibility but I couldn't find an observable variant for the same. I'm trying to do something like this (for now I used a workaround but ideally an observable that emits visibility changes would be the best for this job):

    secondItem.visibility()
      .subscribe ({ 
        if(it == View.VISIBLE) {
          (itemWhichShouldFillLayout.layoutParams as LinearLayout.LayoutParams).weight = 0.65f
        } else {
          (itemWhichShouldFillLayout.layoutParams as LinearLayout.LayoutParams).weight = 0.8f
        }
    })
    
    opened by mohsin 4
  • Implement onQueryTextSubmit(query: String)

    Implement onQueryTextSubmit(query: String)

    Hi, Thank for great work

    Can you implement this override fun onQueryTextSubmit(query: String) = false.

    I want to capture Search button on the keyboard.

    Thanks so much,

    opened by hoangwy 1
Releases(0.4.0)
  • 0.4.0(Feb 19, 2016)

    • New bindings!
      • rxbinding:
        • RxAbsListView:
          • scrollEvents - List scroll events.
        • RxAutoCompleteTextView:
          • completionHint - Sets the hint text at the bottom of the suggestion list.
          • threshold - Sets the minimum number of characters before suggestions are shown.
        • RxPopupMenu:
          • itemClicks - Menu item clicks.
          • dismisses - Menu item dismissal.
      • rxbinding-appcompat-v7:
        • RxActionMenuView:
          • itemClicks - Menu item clicks.
        • RxPopupMenu:
          • itemClicks - Menu item clicks.
          • dismisses - Menu item dismissal.
      • rxbinding-design:
        • RxTextInputLayout:
          • error - Sets the error text for the text input.
          • errorRes - Sets the error text resource for the text input.
      • rxbinding-support-v4:
        • RxMenuItemCompat:
          • actionViewEvents- Menu item action view events.
    • Update Kotlin modules dependency to v1.0.0.
    • Fix: Remove 76 needless synthetic accessor methods.

    Platform bindings:

    compile 'com.jakewharton.rxbinding:rxbinding:0.4.0'
    

    'support-v4' library bindings:

    compile 'com.jakewharton.rxbinding:rxbinding-support-v4:0.4.0'
    

    'appcompat-v7' library bindings:

    compile 'com.jakewharton.rxbinding:rxbinding-appcompat-v7:0.4.0'
    

    'design' library bindings:

    compile 'com.jakewharton.rxbinding:rxbinding-design:0.4.0'
    

    'recyclerview-v7' library bindings:

    compile 'com.jakewharton.rxbinding:rxbinding-recyclerview-v7:0.4.0'
    

    'leanback-v17' library bindings:

    compile 'com.jakewharton.rxbinding:rxbinding-leanback-v17:0.4.0'
    

    Kotlin extension methods for all of the above libraries are available by appending -kotlin to the 'artifactId' of the dependency. For example, rxbinding-support-v4 becomes rxbinding-support-v4-kotlin.

    Source code(tar.gz)
    Source code(zip)
  • 0.3.0(Oct 23, 2015)

    • New modules!
      • rxbinding-leanback-v17 (and rxbinding-leanback-v17-kotlin) for the 'Leanback Support Library':
        • RxSearchBar:
          • searchQuery - Sets the query text.
          • searchQueryChanges - Query text changes.
          • searchQueryChangeEvents - Query text change events.
        • RxSearchEditText:
          • keyboardDismisses - Keyboard dismisses.
    • New bindings!
      • rxbinding:
        • RxAutoCompleteTextView:
          • itemClickEvents - Suggestion item clicks.
        • RxCheckedTextView:
          • checked - Sets the checked state.
        • RxMenuItem:
          • actionViewEvents - Action view expand and collapse events.
          • checked - Sets the checked state.
          • clicks - Item clicks.
          • enabled - Sets the enabled state.
          • icon - Sets the icon.
          • iconRes - Sets the icon using a resource.
          • title - Sets the title.
          • titleRes - Sets the title using a resources.
          • visible - Sets the visible state.
        • RxSeekBar:
          • userChanges - Only user value changes.
          • systemChanges - Only system value changes.
        • RxTextView:
          • afterTextChangeEvents - After text change events.
          • beforeTextChangeEvents - Before text change events.
          • color - Sets the text color.
          • error - Sets the error text.
          • errorRes - Sets the error text using a resource.
          • hint - Sets the hint text.
          • hintRes - Sets the hint text using a resource.
        • RxToolbar:
          • navigationClicks - Clicks on the navigation view.
        • RxView:
          • draws - ViewTreeObserver draw events.
          • globalLayouts - ViewTreeObserver global layout events.
          • hovers - View hover MotionEvent.
          • hoverEvents - View hover MotionEvent events.
          • layoutChanges - ViewTreeObserver layout changes.
          • layoutChangeEvents - ViewTreeObserver layout change events.
          • preDraws - ViewTreeObserver pre-draw events.
          • scrollChangeEvents - Scroll offset change events.
          • systemUiVisibilityChanges - System UI visibility changes.
        • RxViewGroup:
          • changeEvents - Child add and remove events.
      • rxbinding-appcompat-v7:
        • RxToolbar:
          • navigationClicks - Clicks on the navigation view.
      • rxbinding-design:
        • RxAppBarLayout:
          • offsetChanges - Offset value changes.
        • RxSwipeDismissBehavior:
          • dismisses - Dismiss events.
        • RxTextInputLayoutTest:
          • counterEnabled - Sets the enabled state of the counter.
          • counterMaxLength - Sets the maximum length of the counter.
          • hint - Sets the hint text.
          • hintRest - Sets the hint text using a resource.
      • rxbinding-recyclerview-v7:
        • RxRecyclerView:
          • scrollStateChanges - Scroll state changes (dragging, settling, idling).
        • RxRecyclerViewAdapter:
          • childAttachStateChangeEvents - Child attach and detach events.
          • dataChanges - Adapter data changes.
      • rxbinding-support-v4:
        • RxViewPager:
          • pageSelections - Page index selections.
    • Update Kotlin dependency to v1.0.0-beta-1038.
    • Update support library dependencies to v23.1.0.
    • Fix: Bindings whose values are irrelevant now use Void instead of Object (and Unit in Kotlin).
    • Fix: Remove binding overloads which provided event objects that included no additional information (aside from the source view). To include the source view for an event, add it with the map operator (e.g., RxFoo.bar(sourceView).map(data -> new Pair<>(sourceView, data))).
      • RxCompoundButton.checkedChangeEvents
      • RxRadioGroup.checkedChangeEvents
      • RxRecyclerView.scrollStateChangeEvents
      • RxView.clickEvents
      • RxView.dragEvents
      • RxView.focusChangeEvents
      • RxView.hoverEvents
      • RxView.longClickEvents
      • RxView.touchEvents

    Platform bindings:

    compile 'com.jakewharton.rxbinding:rxbinding:0.3.0'
    

    'support-v4' library bindings:

    compile 'com.jakewharton.rxbinding:rxbinding-support-v4:0.3.0'
    

    'appcompat-v7' library bindings:

    compile 'com.jakewharton.rxbinding:rxbinding-appcompat-v7:0.3.0'
    

    'design' library bindings:

    compile 'com.jakewharton.rxbinding:rxbinding-design:0.3.0'
    

    'recyclerview-v7' library bindings:

    compile 'com.jakewharton.rxbinding:rxbinding-recyclerview-v7:0.3.0'
    

    'leanback-v17' library bindings:

    compile 'com.jakewharton.rxbinding:rxbinding-leanback-v17:0.3.0'
    

    Kotlin extension methods for all of the above libraries are available by appending -kotlin to the 'artifactId' of the dependency. For example, rxbinding-support-v4 becomes rxbinding-support-v4-kotlin.

    Source code(tar.gz)
    Source code(zip)
  • 0.2.0(Aug 23, 2015)

    • New modules!
      • rxbinding-appcompat-v7 (and rxbinding-appcompat-v7-kotlin) for the 'AppCompat Support Library':
        • RxSearchView:
          • queryTextChanges - Query text changes.
          • queryTextChangeEvents - Query text change events.
          • query - Sets the query text.
        • RxToolbar:
          • itemClicks - Item clicks.
      • rxbinding-design (and rxbinding-design-kotlin) for the 'Design Support Library':
        • RxNavigationView:
          • itemSelections - Item selections.
        • RxSnackbar:
          • dismisses - Dismiss events.
        • RxTabLayout:
          • selections - Tab selections.
          • selectionEvents - Tab selection, reselection, and unselection events.
          • select - Sets the selected tab.
      • rxbinding-recyclerview-v7 (and rxbinding-recyclerview-v7-kotlin) for the 'RecyclerView Support Library':
        • RxRecyclerView:
          • scrollEvents - Scroll events.
          • scrollStateChangeEvents - Scroll state change events (dragging, settling, idling).
    • New bindings!
      • rxbinding:
        • RxSearchView:
          • queryTextChanges - Query text changes.
          • queryTextChangeEvents - Query text change events.
          • query - Sets the query text.
        • RxSwipeRefreshLayout:
          • refreshes - Refresh events.
          • refreshing - Whether showing the refreshing indicator.
        • RxTextSwitcher:
          • text - Sets the text to display.
          • currentText - Sets the current displayed text.
        • RxToolbar:
          • itemClicks - Item clicks.
        • RxView:
          • attaches - Attach indication.
          • attachEvents - Attach and detach events.
          • detaches - Detach indication.
    • Added @CheckResult to methods which will generate lint warnings if the return value is ignored.
    • Added @NonNull to methods to indicate to lint that they will never return null and added to parameters to indicate to lint for which arguments is null not allowed. Explicit null checks have been removed.
    • Update Kotlin modules to Kotlin v0.12.1230.
    • Update support library dependencies to v23.0.0.
    • Minimum SDK version is now 14 because reasons.
    • Fix: Kotlin modules now have correct dependencies on the corresponding Java modules.

    Platform bindings:

    compile 'com.jakewharton.rxbinding:rxbinding:0.2.0'
    

    'support-v4' library bindings:

    compile 'com.jakewharton.rxbinding:rxbinding-support-v4:0.2.0'
    

    'appcompat-v7' library bindings:

    compile 'com.jakewharton.rxbinding:rxbinding-appcompat-v7:0.2.0'
    

    'design' library bindings:

    compile 'com.jakewharton.rxbinding:rxbinding-design:0.2.0'
    

    'recyclerview-v7' library bindings:

    compile 'com.jakewharton.rxbinding:rxbinding-recyclerview-v7:0.2.0'
    

    Kotlin extension methods for all of the above libraries are available by appending -kotlin to the 'artifactId' of the dependency. For example, rxbinding-support-v4 becomes rxbinding-support-v4-kotlin.

    Source code(tar.gz)
    Source code(zip)
  • 0.1.0(Aug 23, 2015)

Owner
Jake Wharton
Jake Wharton
Selfie Segmentation in Android with MLKit APIs

Realtime Selfie Segmentation In Android With MLKit Perform realtime segmentation with the Selfie Segmentation feature from MLKit Download the APK to t

Shubham Panchal 8 Jun 11, 2022
A sample project in Kotlin to demonstrate AndroidX, MVVM, Coroutines, Hilt, Room, Data Binding, View Binding, Retrofit, Moshi, Leak Canary and Repository pattern.

This repository contains a sample project in Kotlin to demonstrate AndroidX, MVVM, Coroutines, Hilt, Room, Data Binding, View Binding, Retrofit, Moshi, Leak Canary and Repository pattern

Areg Petrosyan 42 Dec 23, 2022
Materially inspired widgets and views that expose RxJava bindings.

Rx.Widgets Materially inspired widgets and views. Use ExpandableButtonGroup Add the widget to your view: <io.andref.rx.widgets.ExpandableButtonGro

Andrefio 12 Mar 12, 2018
A simple app to showcase Androids Material Design and some of the cool new cool stuff in Android Lollipop. RecyclerView, CardView, ActionBarDrawerToggle, DrawerLayout, Animations, Android Compat Design, Toolbar

#Android-LollipopShowcase This is a simple showcase to show off Android's all new Material Design and some other cool new stuff which is (new) in Andr

Mike Penz 1.8k Nov 10, 2022
Androids EditText that animates the typed text. EditText is extended to create AnimatedEditText and a PinEntryEditText.

AnimatedEditText for Android This repository contains AnimatedEditText and TextDrawable all of which extend the behaviour of EditText and implement fe

Ali Muzaffar 439 Nov 29, 2022
A simple app to showcase Androids Material Design and some of the cool new cool stuff in Android Lollipop. RecyclerView, CardView, ActionBarDrawerToggle, DrawerLayout, Animations, Android Compat Design, Toolbar

#Android-LollipopShowcase This is a simple showcase to show off Android's all new Material Design and some other cool new stuff which is (new) in Andr

Mike Penz 1.8k Nov 10, 2022
A simple app to showcase Androids Material Design and some of the cool new cool stuff in Android Lollipop. RecyclerView, CardView, ActionBarDrawerToggle, DrawerLayout, Animations, Android Compat Design, Toolbar

#Android-LollipopShowcase This is a simple showcase to show off Android's all new Material Design and some other cool new stuff which is (new) in Andr

Mike Penz 1.8k Nov 10, 2022
Trying to play with Jetpack compose low level animations APIs, which are animate*AsState APIs.

ComposeSimpleAnimation Trying to play with Jetpack compose low level animations APIs, which are animate*AsState APIs that I needed in another project.

Mustafa Ibrahim 39 Dec 10, 2022
Paging indicator widgets compatible with the ViewPager from the Android Support Library and ActionBarSherlock.

Android ViewPagerIndicator Paging indicator widgets that are compatible with the ViewPager from the Android Support Library to improve discoverability

Jake Wharton 10.2k Dec 26, 2022
A Collection on all Jetpack compose UI elements, Layouts, Widgets and Demo screens to see it's potential

ComposeCookBook Declarative UI A Collection of all Jetpack compose UI elements, Layouts, Widgets and Demo screens to see it's potential. Jetpack Compo

Gurupreet Singh 4.9k Dec 31, 2022
Paging indicator widgets compatible with the ViewPager from the Android Support Library and ActionBarSherlock.

Android ViewPagerIndicator Paging indicator widgets that are compatible with the ViewPager from the Android Support Library to improve discoverability

Jake Wharton 10.2k Jan 3, 2023
Bootstrap style widgets for Android, with Glyph Icons

Android-Bootstrap Android Bootstrap is an Android library which provides custom views styled according to the Twitter Bootstrap Specification. This al

Bearded Hen 7.3k Jan 3, 2023
Material Design implementation for Android 4.0+. Shadows, ripples, vectors, fonts, animations, widgets, rounded corners and more.

Carbon Material Design implementation for Android 4.0 and newer. This is not the exact copy of the Lollipop's API and features. It's a custom implemen

null 3k Dec 30, 2022
Bootstrap style widgets for Android, with Glyph Icons

Android-Bootstrap Android Bootstrap is an Android library which provides custom views styled according to the Twitter Bootstrap Specification. This al

Bearded Hen 7.3k Jan 3, 2023
Android library that allows applications to add dialog-based slider widgets to their settings

Android Slider Preference Library Overview Slider represents a float between 0.0 and 1.0 Access with SliderPreference.getValue() or SharedPreferences.

Jay Petacat 135 Nov 29, 2022
A simple calendar with events, customizable widgets and no ads.

Simple Calendar A simple calendar with events and a customizable widget. A simple calendar with optional CalDAV synchronization. You can easily create

Simple Mobile Tools 3k Jan 3, 2023
Material Design implementation for Android 4.0+. Shadows, ripples, vectors, fonts, animations, widgets, rounded corners and more.

Carbon Material Design implementation for Android 4.0 and newer. This is not the exact copy of the Lollipop's API and features. It's a custom implemen

null 3k Jan 9, 2023
ExpandableSelector is an Android library created to show a list of Button/ImageButton widgets inside a animated container which can be collapsed or expanded.

ExpandableSelector ExpandableSelector is an Android library created to show a list of Button/ImageButton widgets inside a animated container which can

Karumi 699 Nov 19, 2022
Form validation and feedback library for Android. Provides .setText for more than just TextView and EditText widgets. Provides easy means to validate with dependencies.

android-formidable-validation Form validation and feedback library for Android. Provides .setText for more than just TextView and EditText widgets. Pr

Linden 147 Nov 20, 2022