# recyclerview

Published articles for recyclerview.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## About

DevFeed: [About](<https://devfeed.tech/articles/about-22788.md>)

Original publisher: [Read original article](<http://androidessence.com/about/>)

Published: 2026-09-15T02:35:35.573025Z

Content type: article

Language: en

Sources: [Android Essence](<https://devfeed.tech/sources/android-essence.md>)

Topics: [Development](<https://devfeed.tech/topics/development.md>), [Android](<https://devfeed.tech/topics/android.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [GitHub](<https://devfeed.tech/topics/github.md>)

Tags: [android-development](<https://devfeed.tech/tags/android-development.md>), [community](<https://devfeed.tech/tags/community.md>), [development](<https://devfeed.tech/tags/development.md>), [github](<https://devfeed.tech/tags/github.md>), [navigation-drawer](<https://devfeed.tech/tags/navigation-drawer.md>), [programming](<https://devfeed.tech/tags/programming.md>), [recyclerview](<https://devfeed.tech/tags/recyclerview.md>)

### AI overview

Android Essence is an introductory Android development resource focused on making programming concepts understandable to learners of all skill levels. It emphasizes core programming fundamentals and accepts requests for additional topics through GitHub issues.

### Source excerpt

About Android Essence Android Essence was first launched on September 2, 2015 by Adam McNeilly. It started off with Adam just wanting to share everything he'd learned about Android development with the community. You can find all sorts of historical context from these posts, like understanding a RecyclerView vs ListView, or even working with a navigation drawer (what a throwback). The problem is that there wasn't always a rhyme or reason to the posts.

## Handle RecyclerView's scroll events in custom TopAppBarScrollBehavior

DevFeed: [Handle RecyclerView's scroll events in custom TopAppBarScrollBehavior](<https://devfeed.tech/articles/handle-recyclerview-s-scroll-events-in-custom-topappbarscrollbehavior-28720.md>)

Original publisher: [Read original article](<https://le0nidas.gr/2026/02/08/handle-recyclerviews-scroll-events-in-custom-topappbarscrollbehavior/>)

Author: Leonidas Partsas

Published: 2026-02-08T11:58:14Z

Content type: tutorial

Language: en

Sources: [le0nidas](<https://devfeed.tech/sources/le0nidas.md>)

Topics: [recyclerview](<https://devfeed.tech/topics/recyclerview.md>), [Compose](<https://devfeed.tech/topics/compose.md>), [implementation](<https://devfeed.tech/topics/implementation.md>), [App](<https://devfeed.tech/topics/app.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [animation](<https://devfeed.tech/tags/animation.md>), [behavior](<https://devfeed.tech/tags/behavior.md>), [compose](<https://devfeed.tech/tags/compose.md>), [featured](<https://devfeed.tech/tags/featured.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [recyclerview](<https://devfeed.tech/tags/recyclerview.md>), [top-app-bar](<https://devfeed.tech/tags/top-app-bar.md>)

### AI overview

A tutorial on handling RecyclerView scroll events in a custom TopAppBarScrollBehavior for Compose. It implements fully collapsed and expanded states, adds animation and scroll buffering, and extends the approach to an exit-until-collapsed behavior.

### Source excerpt

In a previous post we saw how to send a RecyclerView's scroll events to a compose parent so that we can leverage the top bar's enter always scroll behavior. The result was good but not great. The top app bar was collapsing and expanding as expected but it was also rendering partially during the transition: ... Continue reading Handle RecyclerView's scroll events in custom TopAppBarScrollBehavior ->

## A Simple key to a Better LazyList in Jetpack Compose

DevFeed: [A Simple key to a Better LazyList in Jetpack Compose](<https://devfeed.tech/articles/a-simple-key-to-a-better-lazylist-in-jetpack-compose-25698.md>)

Original publisher: [Read original article](<https://blog.shreyaspatil.dev/a-simple-key-to-a-better-lazylist-in-jetpack-compose/>)

Author: Shreyas Patil

Published: 2025-10-08T12:00:28Z

Content type: tutorial

Language: en

Sources: [Shreyas Patil's Blog](<https://devfeed.tech/sources/shreyas-patil-s-blog.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Compose](<https://devfeed.tech/topics/compose.md>), [Android](<https://devfeed.tech/topics/android.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [compose](<https://devfeed.tech/tags/compose.md>), [compose-multiplatform](<https://devfeed.tech/tags/compose-multiplatform.md>), [efficiency](<https://devfeed.tech/tags/efficiency.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [learn](<https://devfeed.tech/tags/learn.md>), [performance](<https://devfeed.tech/tags/performance.md>), [recyclerview](<https://devfeed.tech/tags/recyclerview.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

A tutorial on using stable, unique keys with Jetpack Compose LazyColumn and LazyRow. It explains that keys help Compose track items when lists change, reducing unnecessary recompositions and improving list performance, while duplicate keys can cause crashes.

### Source excerpt

Learn how to optimize Jetpack Compose LazyList performance using keys. Understand how keys help reduce recompositions and improve scrolling efficiency.

## Send RecyclerView's scroll events to a compose parent

DevFeed: [Send RecyclerView's scroll events to a compose parent](<https://devfeed.tech/articles/send-recyclerview-s-scroll-events-to-a-compose-parent-28716.md>)

Original publisher: [Read original article](<https://le0nidas.gr/2025/08/10/send-recyclerviews-scroll-events-to-a-compose-parent/>)

Author: Leonidas Partsas

Published: 2025-08-10T06:58:04Z

Content type: tutorial

Language: en

Sources: [le0nidas](<https://devfeed.tech/sources/le0nidas.md>)

Topics: [Compose](<https://devfeed.tech/topics/compose.md>), [recyclerview](<https://devfeed.tech/topics/recyclerview.md>), [screen](<https://devfeed.tech/topics/screen.md>), [App](<https://devfeed.tech/topics/app.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [app](<https://devfeed.tech/tags/app.md>), [compose](<https://devfeed.tech/tags/compose.md>), [enter-always-behavior](<https://devfeed.tech/tags/enter-always-behavior.md>), [featured](<https://devfeed.tech/tags/featured.md>), [fragment](<https://devfeed.tech/tags/fragment.md>), [fragments](<https://devfeed.tech/tags/fragments.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [nested-scroll](<https://devfeed.tech/tags/nested-scroll.md>), [recyclerview](<https://devfeed.tech/tags/recyclerview.md>), [screen](<https://devfeed.tech/tags/screen.md>), [top-app-bar](<https://devfeed.tech/tags/top-app-bar.md>)

### AI overview

This tutorial explains how to send RecyclerView scroll events to a Jetpack Compose parent during a gradual migration from fragment-based Android screens. It describes connecting Compose nested-scroll behavior to a RecyclerView using a NestedScrollDispatcher so a Compose top bar can respond to scrolling.

### Source excerpt

We have an app that relies heavily on fragments. Every screen is an activity that hosts a fragment that hosts a recycler view: We want to start migrating the screens to compose by keeping the screen's content and placing it in a compose environment. This means that our activities will call setContent { } instead ... Continue reading Send RecyclerView's scroll events to a compose parent ->

## Simplify ViewBinding in Android with ViewBindingPropertyDelegate 2.0

DevFeed: [Simplify ViewBinding in Android with ViewBindingPropertyDelegate 2.0](<https://devfeed.tech/articles/simplify-viewbinding-in-android-with-viewbindingpropertydelegate-2-0-25960.md>)

Original publisher: [Read original article](<https://kirillr.medium.com/whats-new-in-vbpd-2-0-a83565134cff?source=rss-7a0a233f88a2------2>)

Author: Kirill Rozov

Published: 2025-02-04T13:30:45Z

Content type: release

Language: en

Sources: [Stories by Kirill Rozov on Medium](<https://devfeed.tech/sources/stories-by-kirill-rozov-on-medium.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Library](<https://devfeed.tech/topics/library.md>), [Jetpack](<https://devfeed.tech/topics/jetpack.md>), [Refactoring](<https://devfeed.tech/topics/refactoring.md>), [Memory Leaks](<https://devfeed.tech/topics/memory-leaks.md>), [recyclerview](<https://devfeed.tech/topics/recyclerview.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-jetpack](<https://devfeed.tech/tags/android-jetpack.md>), [fragments](<https://devfeed.tech/tags/fragments.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [library](<https://devfeed.tech/tags/library.md>), [memory-leaks](<https://devfeed.tech/tags/memory-leaks.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [performance](<https://devfeed.tech/tags/performance.md>), [recyclerview](<https://devfeed.tech/tags/recyclerview.md>), [refactoring](<https://devfeed.tech/tags/refactoring.md>), [release](<https://devfeed.tech/tags/release.md>), [ui](<https://devfeed.tech/tags/ui.md>), [view-binding](<https://devfeed.tech/tags/view-binding.md>)

### AI overview

This article announces ViewBindingPropertyDelegate 2.0, a release that refactors how the Android library manages ViewBinding lifecycles. It replaces Jetpack Lifecycle-based detection with component lifecycle callbacks for Fragments and Activities, improving the timing of reference clearing and addressing issues related to Fragment animations. The release also supports lazy ViewBinding creation and aims to prevent memory leaks.

### Source excerpt

I'm excited to announce the release of ViewBindingPropertyDelegate 2.0, which introduces significant under-the-hood refactoring to enhance the library's stability and performance. In this article, I'll highlight the most important changes and explain how they improve the library's functionality. Brief Introduction ViewBindingPropertyDelegate(VBPD) is a lightweight library designed to simplify the use of Android's ViewBinding by: Managing the ViewBinding lifecycle and clearing references to prevent memory leaks. Eliminating the need to maintain nullable references to Views or ViewBindings. Creating ViewBindings lazily. The library supports usage in various components, including Activities, Fragments, ViewGroups, and RecyclerView.ViewHolders. class ProfileFragment : Fragment(R.layout.profile) { private val profileBinding: ProfileBinding by viewBinding(ProfileBinding::bind) override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) // ProfileBinding instance will be created lazily on first access profileBinding.name.text = ... } override fun onDestroyView() { super.onDestroyView() // profileBinding reference will be cleared after onDestroyView() } }Changes in 2.0Transition from Lifecycle to Component Callbacks In previous versions (1.x), VBPD relied on Jetpack's Lifecycle to detect when a View was being destroyed. This approach had a limitation: the Lifecycle callback methods could be invoked before Fragment.onDestroyView(), while the ViewBinding reference was still needed. To address this, VBPD postponed clearing the ViewBinding reference using an Android Handler after onDestroyView(), when the Fragment's View LifecycleOwner transitioned to the DESTROYED state. In version 2.0, VBPD now utilizes FragmentManager.FragmentLifecycleCallbacks to detect when a Fragment's view is destroyed. The key difference lies in the timing of these callbacks, allowing for more precise management of the ViewBinding lifecycle. // Sou

## Using Compose Previews to Preview XML-Based Android Views

DevFeed: [Using Compose Previews to Preview XML-Based Android Views](<https://devfeed.tech/articles/back-to-the-future-compose-previewing-your-xml-based-views-25687.md>)

Original publisher: [Read original article](<https://sergiosastre.hashnode.dev/back-to-the-future-compose-previewing-your-xml-based-views>)

Author: Sergio Sastre Florez

Published: 2024-12-17T20:09:09Z

Content type: tutorial

Language: en

Sources: [Sergio's little tech corner](<https://devfeed.tech/sources/sergio-s-little-tech-corner.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [XML](<https://devfeed.tech/topics/xml.md>), [Android](<https://devfeed.tech/topics/android.md>), [ui](<https://devfeed.tech/topics/ui.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [android-studio](<https://devfeed.tech/tags/android-studio.md>), [compose](<https://devfeed.tech/tags/compose.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [layout](<https://devfeed.tech/tags/layout.md>), [recyclerview](<https://devfeed.tech/tags/recyclerview.md>), [testing](<https://devfeed.tech/tags/testing.md>), [ui](<https://devfeed.tech/tags/ui.md>), [ui-testing](<https://devfeed.tech/tags/ui-testing.md>), [xml](<https://devfeed.tech/tags/xml.md>)

### AI overview

This tutorial explains how Jetpack Compose Previews can be used to preview XML-based Android Views, including ViewHolder UI logic and dynamic behavior that static XML previews cannot represent.

### Source excerpt

Jetpack Compose has transformed Android UI development with its declarative approach, making UI code simpler to write. One of its standout features is Compose Previews, which allows developers to instantly view how Composable functions will look on a...

## Lazy layouts contentPadding

DevFeed: [Lazy layouts contentPadding](<https://devfeed.tech/articles/lazy-layouts-contentpadding-22661.md>)

Original publisher: [Read original article](<https://www.valueof.io/blog/lazy-layouts-lazyrow-lazycolumn-contentpadding-compose>)

Author: James Shvarts

Published: 2022-05-22T12:57:51Z

Content type: tutorial

Language: en

Sources: [Android Blog - Mobile Dev Notes](<https://devfeed.tech/sources/android-blog-mobile-dev-notes.md>)

Topics: [Compose](<https://devfeed.tech/topics/compose.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [compose](<https://devfeed.tech/tags/compose.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [issue](<https://devfeed.tech/tags/issue.md>), [layout](<https://devfeed.tech/tags/layout.md>), [padding](<https://devfeed.tech/tags/padding.md>), [parameter](<https://devfeed.tech/tags/parameter.md>), [recyclerview](<https://devfeed.tech/tags/recyclerview.md>)

### AI overview

A Compose tutorial explains how to use contentPadding in lazy layouts so the first and last items receive padding without clipping the items between them. It contrasts contentPadding with padding and identifies clipping caused by using padding on the layout.

### Source excerpt

Controlling padding for first and last item in a lazy layout in Compose

## Data Binding: BindingAdapter

DevFeed: [Data Binding: BindingAdapter](<https://devfeed.tech/articles/data-binding-bindingadapter-24743.md>)

Original publisher: [Read original article](<https://medium.com/yazio-engineering/data-binding-bindingadapter-7d0824b1efff?source=rss----65bd178b00af---4>)

Author: Paul Woitaschek

Published: 2021-11-19T08:06:16Z

Content type: tutorial

Language: en

Sources: [YAZIO Engineering - Medium](<https://devfeed.tech/sources/yazio-engineering-medium.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [recyclerview](<https://devfeed.tech/topics/recyclerview.md>), [XML](<https://devfeed.tech/topics/xml.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [RxJava](<https://devfeed.tech/topics/rxjava.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [code](<https://devfeed.tech/tags/code.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [recyclerview](<https://devfeed.tech/tags/recyclerview.md>), [xml](<https://devfeed.tech/tags/xml.md>)

### AI overview

This tutorial explains how to use Android Data Binding and a BindingAdapter to apply strike-through formatting to a TextView based on a view model. The author reports reducing RecyclerView ViewHolder boilerplate by about 50%.

### Source excerpt

For a long time I did not investigate further into https://developer.android.com/tools/data-binding/guide.html but recently it just got my attention. Just like Kotlin or RxJava this was something that was constantly trying to get my attention so I decided to give it a try and to see how it works while writing my new notes app. And I must say: I'm impressed. I applied it on the ViewHolder of my RecyclerView and reduced the boilerplate code by about 50%. But there were some issues. Issues The biggest I had was manipulating the view. The grey text could be simply archieved by setting the view enabled based on the view model: android:enabled="@{!model.done()}" As the text was set to @color/abc_primary_text_material_light from the support library this automatically works. But how to set the strike through? I did not wanted to call all these `findViewById` any more as that would defeat the purpose of DataBinding. Solution It turned out there was a simple solution, called BindingAdapter> https://developer.android.com/reference/android/databinding/BindingAdapter.html Basically you just define a static method and annotate it as a binding adapter. So for strikeThrough it is: @BindingAdapter("text:strike") public static void setStrike(TextView text, boolean strike) { if (strike) { text.setPaintFlags(text.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); } else { text.setPaintFlags(text.getPaintFlags() & ~Paint.STRIKE_THRU_TEXT_FLAG); } } So now you can set it just as a regular xml attribute: android:strike="@{model.done()}" Data Binding: BindingAdapter was originally published in Yazio Engineering on Medium, where people are continuing the conversation by highlighting and responding to this story.

## A View-by-View Strategy for Snapshot Testing on Android

DevFeed: [A View-by-View Strategy for Snapshot Testing on Android](<https://devfeed.tech/articles/the-secrets-of-effectively-snapshot-testing-on-android-25692.md>)

Original publisher: [Read original article](<https://sergiosastre.hashnode.dev/the-secrets-of-effectively-snapshot-testing-on-android>)

Author: Sergio Sastre Florez

Published: 2021-09-23T20:22:08Z

Content type: tutorial

Language: en

Sources: [Sergio's little tech corner](<https://devfeed.tech/sources/sergio-s-little-tech-corner.md>)

Topics: [Testing](<https://devfeed.tech/topics/testing.md>), [Android](<https://devfeed.tech/topics/android.md>), [ui-testing](<https://devfeed.tech/topics/ui-testing.md>), [ui](<https://devfeed.tech/topics/ui.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [best-practices](<https://devfeed.tech/tags/best-practices.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [introduction](<https://devfeed.tech/tags/introduction.md>), [recyclerview](<https://devfeed.tech/tags/recyclerview.md>), [testing](<https://devfeed.tech/tags/testing.md>), [tests](<https://devfeed.tech/tags/tests.md>), [ui](<https://devfeed.tech/tags/ui.md>), [ui-testing](<https://devfeed.tech/tags/ui-testing.md>)

### AI overview

This tutorial presents a view-by-view strategy for snapshot testing Android UI components. It explains why testing individual views can reduce synchronization work, simplify screen-state selection, and make flaky tests easier to diagnose, using a RecyclerView as an example.

### Source excerpt

When one gets started with snapshot testing, there are not enough resources to learn from. It's no surprise to end up with snapshot tests causing a lot of headaches rather than helping improve the quality of our app. One should not snapshot test with...

## Using @JvmSuppressWildcards to resolve Kotlin and Java generic type issues

DevFeed: [Using @JvmSuppressWildcards to resolve Kotlin and Java generic type issues](<https://devfeed.tech/articles/jvmsuppresswildcards-the-secret-sauce-to-your-sandwich-style-generics-25906.md>)

Original publisher: [Read original article](<https://chao2zhang.medium.com/jvmsuppresswildcards-the-secret-sauce-to-your-sandwich-style-generics-b0093aa5979d?source=rss-d19045640fe------2>)

Author: Chao Zhang

Published: 2021-02-23T16:01:15Z

Content type: tutorial

Language: en

Sources: [Stories by Chao Zhang on Medium](<https://devfeed.tech/sources/stories-by-chao-zhang-on-medium.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [generics](<https://devfeed.tech/topics/generics.md>), [Java](<https://devfeed.tech/topics/java.md>), [Android](<https://devfeed.tech/topics/android.md>), [Dagger](<https://devfeed.tech/topics/dagger.md>), [recyclerview](<https://devfeed.tech/topics/recyclerview.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [compilation-error](<https://devfeed.tech/tags/compilation-error.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [dagger](<https://devfeed.tech/tags/dagger.md>), [generics](<https://devfeed.tech/tags/generics.md>), [java](<https://devfeed.tech/tags/java.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-generics](<https://devfeed.tech/tags/kotlin-generics.md>), [recyclerview](<https://devfeed.tech/tags/recyclerview.md>)

### AI overview

This tutorial explains how Kotlin generics interact with Java in mixed Kotlin-Java codebases, including Android applications and Dagger-based dependencies. It shows how the @JvmSuppressWildcards annotation can resolve compilation and type-inference problems when Kotlin generic APIs are consumed by Java code.

### Source excerpt

Photo: amirali mirhashemian from Unsplash If generic types are exposed in Kotlin API, consider @JvmSuppressWildcards so that your Java consumer can compile successfully. Kotlin generics are different from (in my opinion, smarter than) Java generics. Kotlin generics has declaration-site variance and type projections, which are officially documented here. Generics is a gigantic topic itself. My usual practice is to leverage IDE warnings and compiler error messages to fix my code since they usually contain the necessary information to show you where you did wrong. However, as we are Kotlinizing our codebase from Java to Kotlin, it is possible to have a sandwich-style code dependency that mixes Java code and Kotlin code. In such cases, when dealing with generics, your compiler and IDE may not be smart enough to help you fix those issues. What is sandwich-style code dependency?🥪 Sandwich-style Kotlin conversion At a certain time during your Java to Kotlin conversion, there could be some Java code depending on Kotlin code, which in turn depends on Java code. A typical example on Android is that your app code in Java depending on your library in Kotlin, which depends on Android SDK in Java. Even if your app code is written purely in Kotlin, the sandwich might still exist: The Java-based annotation processing Dagger, depends on your app code in Kotlin, which depends on Android SDK in Java. Now let's look at how the secret sauce @JvmSuppressWildcards can help us by making our generic sandwich tasty. Sandwich: List<Object> in RecyclerView methodshttps://medium.com/media/87fd0c63db2b9c82af2b241bf61cef31/href With the code above, the following compilation error is observed: MyChildAdapter.java:13: error: name clash: onBindViewHolder(MyViewHolder,int,List<Object>) in MyChildAdapter overrides a method whose erasure is the same as another method, yet neither overrides the other The error message leads us to think that we need to change our type here: Change the Kotlin generic para

## Unit Tests and Concurrency

DevFeed: [Unit Tests and Concurrency](<https://devfeed.tech/articles/unit-tests-and-concurrency-25874.md>)

Original publisher: [Read original article](<http://lordraydenmk.github.io//2021/unit-tests-and-concurrency/>)

Author: Stojan Anastasov

Published: 2021-01-06T00:00:00Z

Content type: tutorial

Language: en

Sources: [Stojan Anastasov's blog](<https://devfeed.tech/sources/stojan-anastasov-s-blog.md>)

Topics: [RxJava](<https://devfeed.tech/topics/rxjava.md>), [Concurrency](<https://devfeed.tech/topics/concurrency.md>), [Android](<https://devfeed.tech/topics/android.md>), [Testing](<https://devfeed.tech/topics/testing.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [api](<https://devfeed.tech/tags/api.md>), [concurrency](<https://devfeed.tech/tags/concurrency.md>), [junit](<https://devfeed.tech/tags/junit.md>), [observeon](<https://devfeed.tech/tags/observeon.md>), [recyclerview](<https://devfeed.tech/tags/recyclerview.md>), [rxjava](<https://devfeed.tech/tags/rxjava.md>), [scheduler](<https://devfeed.tech/tags/scheduler.md>), [testing](<https://devfeed.tech/tags/testing.md>), [tests](<https://devfeed.tech/tags/tests.md>), [trampoline](<https://devfeed.tech/tags/trampoline.md>)

### AI overview

This tutorial explains how replacing RxJava schedulers with a single test scheduler can hide concurrency problems. It presents an Android example involving concurrent API calls and discusses refactoring the RxJava chain to update the UI as results become available.

### Source excerpt

Once Retrofit added RxJava support, RxJava became my go-to concurrency framework for writing Android apps. One of the great things about RxJava is the excellent testing support. It includes TestObserver, TestScheduler, RxJavaPlugins so you can switch your schedulers in tests. A common approach in testing RxJava code is using a JUnit rule that replaces the Scheduler pools with Schedulers.trampoline() before tests are run and resets them to the original thread pools after the tests. This makes the whole Observable chain runs on a single thread, the same thread the test runs on, which means we can write assertions without worrying about concurrency. However the production code usually is not single threaded. IO operations are done on the IO thread pool, views are updated on the main thread and everything else happens on the computation pool. By using different schedulers in the tests and using a different strategy (single threaded) we make those unit tests useless in catching concurrency issues. A real world scenario I was working on a side project. The screen consists of a RecyclerView displaying a list of elements. To get the elements I need to perform two different API calls. The first API call returns a list with N elements, then for each item in the list I need to perform the second call. After combining the data I send it to the UI for displaying. Using RxJava this looks like: // Emits Loading then Content or Problem private fun requestData(): Observable<ViewState> = service.firstApiCall() .observeOn(Schedulers.computation()) .map { it.message } .flatMap(this::secondApiCall) .map<ViewState> { ViewState.Content(it) } .startWith(Single.just(ViewState.Loading)) .onErrorReturn { ViewState.Problem } .toObservable() // Concurrently executes secondApiCall for each element in list. // Transforms the result to ViewEntity, combines everything in a list private fun secondApiCall(list: List<String>): Single<List<ViewEntity>> = Observable.fromIterable(list) .concatMapEager {

## First Look at Jetpack Compose

DevFeed: [First Look at Jetpack Compose](<https://devfeed.tech/articles/first-look-at-jetpack-compose-29052.md>)

Original publisher: [Read original article](<https://dmitrysamoylenko.com/2020/09/13/jetpack_compose.html>)

Author: Dmitry Samoylenko

Published: 2020-09-13T00:00:00Z

Content type: article

Language: en

Sources: [Dmitry Samoylenko - Android Developer Blog](<https://devfeed.tech/sources/dmitry-samoylenko-android-developer-blog.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Android](<https://devfeed.tech/topics/android.md>), [Android Studio](<https://devfeed.tech/topics/android-studio.md>), [recyclerview](<https://devfeed.tech/topics/recyclerview.md>), [Canvas](<https://devfeed.tech/topics/canvas.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-studio](<https://devfeed.tech/tags/android-studio.md>), [canvas](<https://devfeed.tech/tags/canvas.md>), [compose](<https://devfeed.tech/tags/compose.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [recyclerview](<https://devfeed.tech/tags/recyclerview.md>)

### AI overview

This article gives an early evaluation of Jetpack Compose by comparing it with traditional Android Views and RecyclerView. It reports higher memory usage for Compose in large scrolling lists, while highlighting concise APIs, lazy-list support, and selective redraw behavior. The article notes that Compose was still in alpha and that its infinite-list support was limited.

### Source excerpt

Let's Create a Hundred Thousand Views I should say upfront that this article is not intended to nitpick this library, as I personally find it quite appealing. First, we'll create a simple list to add views to. This is an inefficient method, but it will illustrate the overall picture of how much attention was paid to performance in the new framework. So, let's compare the old method: class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val N = 100_000 setContentView( ScrollView(this).apply { addView( LinearLayout(context).apply { orientation = LinearLayout.VERTICAL repeat(N) { addView( TextView(context) .apply { text = "hello $it" }) } }) }) } } And the new method: class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val N = 100_000 setContent { MyApplicationTheme { Surface(color = MaterialTheme.colors.background) { ScrollableColumn { repeat(N) { Text(text = "Hello $it") } } } } } } } This is a simple scrolling list, where N text views are arranged vertically.

## Fixing RecyclerView nested scrolling in opposite direction

DevFeed: [Fixing RecyclerView nested scrolling in opposite direction](<https://devfeed.tech/articles/fixing-recyclerview-nested-scrolling-in-opposite-direction-25879.md>)

Original publisher: [Read original article](<https://bladecoder.medium.com/fixing-recyclerview-nested-scrolling-in-opposite-direction-f587be5c1a04?source=rss-54910f05af37------2>)

Author: Christophe Beyls

Published: 2020-03-26T15:24:30Z

Content type: tutorial

Language: en

Sources: [Stories by Christophe Beyls on Medium](<https://devfeed.tech/sources/stories-by-christophe-beyls-on-medium.md>)

Topics: [recyclerview](<https://devfeed.tech/topics/recyclerview.md>), [Android](<https://devfeed.tech/topics/android.md>), [User Interfaces](<https://devfeed.tech/topics/user-interfaces.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [interfaces](<https://devfeed.tech/tags/interfaces.md>), [layoutmanager](<https://devfeed.tech/tags/layoutmanager.md>), [nested-scroll](<https://devfeed.tech/tags/nested-scroll.md>), [recyclerview](<https://devfeed.tech/tags/recyclerview.md>)

### AI overview

This tutorial explains the nested-scrolling behavior of Android RecyclerView, focusing on layouts where horizontally scrolling lists are nested inside a vertically scrolling list. It describes why touch events can be intercepted by the parent and cause unexpected vertical scrolling, with examples such as Netflix-like video interfaces and Google Play Store layouts.

### Source excerpt

Photo by Tabl-trai under Creative Commons licenceand making ViewPager2 usable RecyclerView is one of the main building blocks of Android user interfaces today. It's more capable and flexible than its ListView predecessor but this also leads to more complexity and new problems. One core feature of RecyclerView is the externalization of its layout engine to components called LayoutManagers, which are no longer limited to vertical scrolling only. Most implementations allow to choose between horizontal and vertical scrolling and a LayoutManager could technically support both at the same time. RecyclerView also supports nested scrolling by implementing the NestedScrollingChild3 interface, which means it can cooperate with a parent view implementing NestedScrollingParent3 when both are configured to scroll in the same direction. In a nutshell, the scrolling child intercepts a scroll event and initiates a nested scroll in cooperation with the scrolling parent. Depending on its internal logic, the parent optionally consumes the scroll before or after the child, until they both reach their available scroll distance. A single scroll event may be consumed by both the parent and child with a seamless transition. For example, this mechanism is used when a RecyclerView is placed inside a CoordinatorLayout next to an app bar which will automatically slide up or collapse when a scroll gesture is initiated. Note that RecyclerView doesn't implement NestedScrollingParent3, so using a scrollable child inside a RecyclerView which scrolls in the same direction is not supported. However, Google currently provides a workaround to implement nested scrolling in a ViewPager2.The problem What about nested scrolling in the opposite direction? This should be supported out-of-the-box, since a vertical scrolling view is not supposed to intercept horizontal gestures and vice versa. In practice this works well with the legacy ViewPager which only scrolls horizontally, ignoring vertical gestures. But

## Build complex screens faster on Android with Epoxy

DevFeed: [Build complex screens faster on Android with Epoxy](<https://devfeed.tech/articles/build-complex-screens-faster-on-android-with-epoxy-24563.md>)

Original publisher: [Read original article](<https://medium.com/bleeding-edge/build-complex-screens-faster-on-android-1773c5a64352?source=rss----d8ebe85cdc0f---4>)

Author: Akshay Chordiya

Published: 2019-12-30T13:31:50Z

Content type: tutorial

Language: en

Sources: [Bleeding Edge - Medium](<https://devfeed.tech/sources/bleeding-edge-medium.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Library](<https://devfeed.tech/topics/library.md>), [ui](<https://devfeed.tech/topics/ui.md>), [implementation](<https://devfeed.tech/topics/implementation.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [class](<https://devfeed.tech/tags/class.md>), [component](<https://devfeed.tech/tags/component.md>), [components](<https://devfeed.tech/tags/components.md>), [declarative](<https://devfeed.tech/tags/declarative.md>), [epoxy](<https://devfeed.tech/tags/epoxy.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [layout](<https://devfeed.tech/tags/layout.md>), [library](<https://devfeed.tech/tags/library.md>), [mvi](<https://devfeed.tech/tags/mvi.md>), [mvvm](<https://devfeed.tech/tags/mvvm.md>), [performance](<https://devfeed.tech/tags/performance.md>), [recyclerview](<https://devfeed.tech/tags/recyclerview.md>), [ui](<https://devfeed.tech/tags/ui.md>), [view](<https://devfeed.tech/tags/view.md>)

### AI overview

This tutorial explains how Clue adopted Airbnb's Epoxy library with RecyclerView to build complex Android screens. It covers Epoxy models, adapters and controllers, declarative layouts, and a unidirectional data-flow pattern related to MVVM and MVI.

### Source excerpt

Rowing the boat -- Illustration by Marta PucciBuild complex screens faster on Android⚡ -- Our journey with Epoxy RecyclerView is such an important UI component on Android. But using it can get complex and error prone--especially when dealing with different view types and pagination. Moreover, it's hard when working on the same screen within the team. In this article, I'm going to share basics of Epoxy and an overview of the problems it helped us solve. Here's our journey of how we adopted Epoxy at Clue to build our UIs faster in parallel within the team.⚡ Backstory It all started with our users, who wanted a more understandable and interactive view of their historical tracking data. ✨(For Clue users, this is generally their menstrual cycles & symptoms.) So our awesome design team came up with this beautiful intuitive design 😍: Enhanced Analysis screen in Clue app I know what you're thinking already: that's a lot of view types. And we were definitely concerned about the performance and responsiveness of the screen. That's when we decided to see if we could use any third-party library to help us with our goal. Epoxy Epoxy is a library from Airbnb which takes a declarative / composable approach to build the UI--typically, a list. It uses RecyclerView under the hood It simplifies creation of static and dynamic layouts Each item in the list is associated to an epoxy model which defines the item's layout and manages binding the data and releasing the view's resources when it's recycled. Item <-> Epoxy Model <-> Layout resource The order of the items shown on the UI is based on how you add the model to the adapter or controller. Philosophy Epoxy encourages a usage pattern similar to the popular MVVM and MVI architecture where the data flows in one direction (UDF - uni-directional data flow). Flow with Epoxy The data forms the state of the UI then goes to EpoxyModel and to the views on the RecyclerView . The Epoxy Model behaves like a ViewModel and provides the interface betwe

## Suspending over Views -- Example

DevFeed: [Suspending over Views -- Example](<https://devfeed.tech/articles/suspending-over-views-example-24928.md>)

Original publisher: [Read original article](<https://medium.com/androiddevelopers/suspending-over-views-example-260ce3dc9100?source=rss-9303277cb6db------2>)

Author: Chris Banes

Published: 2019-12-02T08:57:37Z

Content type: tutorial

Language: en

Sources: [Chris Banes on Medium](<https://devfeed.tech/sources/chris-banes-on-medium.md>)

Topics: [Coroutines](<https://devfeed.tech/topics/coroutines.md>), [recyclerview](<https://devfeed.tech/topics/recyclerview.md>), [ui](<https://devfeed.tech/topics/ui.md>), [Development](<https://devfeed.tech/topics/development.md>)

Tags: [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [asynchronous](<https://devfeed.tech/tags/asynchronous.md>), [callback](<https://devfeed.tech/tags/callback.md>), [coroutines](<https://devfeed.tech/tags/coroutines.md>), [development](<https://devfeed.tech/tags/development.md>), [kotlin-coroutines](<https://devfeed.tech/tags/kotlin-coroutines.md>), [recyclerview](<https://devfeed.tech/tags/recyclerview.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

A worked example from the Tivi app shows how coroutines can simplify asynchronous UI operations. It examines a broken episode-expanding animation caused by reused item IDs and views that may not be attached to the RecyclerView.

### Source excerpt

Illustration by Virginia PoltrackSuspending over views -- exampleA worked example from the Tivi app This blog post is the second of two which explores how coroutines enables you to write complex asynchronous UI operations in a much simpler way. The first post goes through the theory, while this post demonstrates how they fix a problem. If you want to recap the first post, you can find it here: Suspending over Views Let's take what we learnt in the previous post and apply it to a real-world app use case. The problem Here we have the TV show details UI from the Tivi sample app. As well as information about the show, it lists the show's seasons and episodes. When the user clicks one of the episodes, the episode's details are displayed using an animation which expands the clicked item: Episode expanding (20% speed) The app uses the InboxRecyclerView library to handle the expanding animation above: https://medium.com/media/af84b36b2b481525fbab682b6a6cffa7/href InboxRecyclerView works by us providing the item ID of view to expand. It then finds the matching view from the RecyclerView items, and performs the animation on it. Now let's look at the issue we're trying to fix. Near the top of the same UI is a different item, which shows the user their next episode to watch. It uses the same view type as the individual episode item shown above, but has a different item ID. To aid development, I was lazy and used the same onEpisodeItemClicked() for this item. Unfortunately this led to a broken animation when clicked. Wrong item expanding (20% speed) Instead of expanding the clicked item, the library expands a seemingly random item at the top. This is not the effect we want, and is caused by some underlying issues: The ID we use in the click listener is taken directly from the Episode class. This ID maps to the individual episode item within the season list. The episode item may not be attached to the RecyclerView. The user would need to have expanded the season and scrolled so th

## Suspending over Views

DevFeed: [Suspending over Views](<https://devfeed.tech/articles/suspending-over-views-24927.md>)

Original publisher: [Read original article](<https://medium.com/androiddevelopers/suspending-over-views-19de9ebd7020?source=rss-9303277cb6db------2>)

Author: Chris Banes

Published: 2019-12-02T07:53:44Z

Content type: tutorial

Language: en

Sources: [Chris Banes on Medium](<https://devfeed.tech/sources/chris-banes-on-medium.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [kotlin-coroutines](<https://devfeed.tech/topics/kotlin-coroutines.md>), [Android](<https://devfeed.tech/topics/android.md>), [Jetpack](<https://devfeed.tech/topics/jetpack.md>), [Programming](<https://devfeed.tech/topics/programming.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [blocking](<https://devfeed.tech/tags/blocking.md>), [coroutines](<https://devfeed.tech/tags/coroutines.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-coroutines](<https://devfeed.tech/tags/kotlin-coroutines.md>), [performance](<https://devfeed.tech/tags/performance.md>), [recyclerview](<https://devfeed.tech/tags/recyclerview.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

This article explains how Kotlin coroutines can simplify asynchronous Android view programming. It describes the callback-heavy Android view system, Jetpack KTX extension functions, and suspending functions that can model UI operations without blocking the main thread.

### Source excerpt

Illustration by Virginia PoltrackSuspending over viewsHow coroutines can make UI programming easier Kotlin Coroutines allow us to model asynchronous problems like synchronous code. That's great, but most usage seems to concentrate on I/O tasks and concurrent operations. Coroutines are great at modelling problems which work across threads, but can also model asynchronous problems on the same thread. There's one place which I think really benefits from this, and that's working with the Android view system. Android views 💘 callbacks The Android view system loves callbacks; like really loves callbacks. To give you an idea, there are currently 80+ callbacks in view and widgets classes in the Android framework, and then another 200+ in Jetpack (includes non-UI libraries, but you get the idea). Commonly used examples include: AnimatorListener to know when an animator finishes. RecyclerView.OnScrollListener to know when the scroll state changes. View.OnLayoutChangeListener to know when a view is laid out. Then there are the APIs which accept a Runnable to perform an async action, such as View.post() or View.postDelayed(), etc. There are so many callbacks because user interface programming on Android is inherently asynchronous. Everything from measure & layout, drawing, to inset dispatch are all performed asynchronously. Generally, something (usually a view) requests a traversal from the system, and then some time later the system dispatches the call, which then triggers any listeners. KTX extension functions For a lot of the APIs we've mentioned above, the team has added extension functions in Jetpack to improve the developer ergonomics. One of my favorites is View.doOnPreDraw(), which greatly simplifies waiting for the next draw to happen. There are many others which I use every day: View.doOnLayout() and Animator.doOnEnd() to name two. But these extension functions only go so far: they make a old-school callback API into a Kotlin-friendly lambda-based API. They're nicer t

## Firestore Pagination in Android -- Using FirebaseUI Library 🔥

DevFeed: [Firestore Pagination in Android -- Using FirebaseUI Library 🔥](<https://devfeed.tech/articles/firestore-pagination-in-android-using-firebaseui-library-25723.md>)

Original publisher: [Read original article](<https://blog.shreyaspatil.dev/firestore-pagination-in-android-using-firebaseui-library-1d7fe1a75704/>)

Author: Shreyas Patil

Published: 2019-07-21T13:00:49Z

Content type: tutorial

Language: en

Sources: [Shreyas Patil's Blog](<https://devfeed.tech/sources/shreyas-patil-s-blog.md>)

Topics: [Firestore](<https://devfeed.tech/topics/firestore.md>), [Android](<https://devfeed.tech/topics/android.md>), [Firebase](<https://devfeed.tech/topics/firebase.md>), [Library](<https://devfeed.tech/topics/library.md>), [Android Library](<https://devfeed.tech/topics/android-library.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-studio](<https://devfeed.tech/tags/android-studio.md>), [architecture-components](<https://devfeed.tech/tags/architecture-components.md>), [code](<https://devfeed.tech/tags/code.md>), [firebase](<https://devfeed.tech/tags/firebase.md>), [firestore](<https://devfeed.tech/tags/firestore.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [implement](<https://devfeed.tech/tags/implement.md>), [library](<https://devfeed.tech/tags/library.md>), [others](<https://devfeed.tech/tags/others.md>), [recyclerview](<https://devfeed.tech/tags/recyclerview.md>)

### AI overview

A tutorial on implementing paginated Cloud Firestore data in an Android app with FirebaseUI's FirestorePagingAdapter. It explains why loading large collections at once can be inefficient and outlines project, dependency, query, paging, adapter, and error-handling setup.

### Source excerpt

Efficiently implement Cloud Firestore pagination in Android using the FirestorePagingAdapter from the FirebaseUI library.

## Building a gesture driven Reddit app

DevFeed: [Building a gesture driven Reddit app](<https://devfeed.tech/articles/building-a-gesture-driven-reddit-app-29019.md>)

Original publisher: [Read original article](<https://saket.me/building-a-gesture-driven-reddit-app/>)

Author: Saket Narayan

Published: 2019-06-16T17:45:13Z

Content type: tutorial

Language: en

Sources: [Saket Narayan](<https://devfeed.tech/sources/saket-narayan.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [ui](<https://devfeed.tech/topics/ui.md>), [Framework](<https://devfeed.tech/topics/framework.md>), [Reddit](<https://devfeed.tech/topics/reddit.md>), [recyclerview](<https://devfeed.tech/topics/recyclerview.md>), [Material Design](<https://devfeed.tech/topics/material-design.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [apis](<https://devfeed.tech/tags/apis.md>), [components](<https://devfeed.tech/tags/components.md>), [framework](<https://devfeed.tech/tags/framework.md>), [gestures](<https://devfeed.tech/tags/gestures.md>), [material-design](<https://devfeed.tech/tags/material-design.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [public-speaking](<https://devfeed.tech/tags/public-speaking.md>), [recyclerview](<https://devfeed.tech/tags/recyclerview.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

An exploratory talk about building Dank, an open-source gesture-driven Reddit app for Android. It demonstrates material design, framework APIs, gestures, spans, custom UI components, nested scrolling, collapsible comments, image dismissal, and real-time Markdown editing.

### Source excerpt

An exploratory talk that showcases how Android can deliver a beautiful experience to the user using material design principles and various framework APIs like gestures and spans. This talk walks the user through a collection of concrete examples of custom UI components and their implementations in my gesture driven Reddit app, Dank. Recreating Google Inbox's [...] The post Building a gesture driven Reddit app appeared first on Saket Narayan.

## Introducing InboxRecyclerView, a library for building expandable descendant navigation

DevFeed: [Introducing InboxRecyclerView, a library for building expandable descendant navigation](<https://devfeed.tech/articles/introducing-inboxrecyclerview-a-library-for-building-expandable-descendant-navigation-29031.md>)

Original publisher: [Read original article](<https://saket.me/inboxrecyclerview/>)

Author: Saket Narayan

Published: 2018-09-14T06:19:26Z

Content type: release

Language: en

Sources: [Saket Narayan](<https://devfeed.tech/sources/saket-narayan.md>)

Topics: [Library](<https://devfeed.tech/topics/library.md>), [navigation](<https://devfeed.tech/topics/navigation.md>), [Android](<https://devfeed.tech/topics/android.md>), [ui](<https://devfeed.tech/topics/ui.md>), [Material Design](<https://devfeed.tech/topics/material-design.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [animation](<https://devfeed.tech/tags/animation.md>), [building](<https://devfeed.tech/tags/building.md>), [gestures](<https://devfeed.tech/tags/gestures.md>), [library](<https://devfeed.tech/tags/library.md>), [material-design](<https://devfeed.tech/tags/material-design.md>), [navigation](<https://devfeed.tech/tags/navigation.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [performance](<https://devfeed.tech/tags/performance.md>), [recyclerview](<https://devfeed.tech/tags/recyclerview.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

The article introduces InboxRecyclerView, an Android library for building expandable descendant navigation with a pull-to-dismiss gesture. It describes how the animation recreates Inbox-style list-item expansion and discusses implementation techniques, including clipping view content and using the Transitions API with ChangeBounds.

### Source excerpt

When Google released Inbox for Android some 4 years ago, their UI was rad. I was obsessed with the navigation transition, where emails expanded from their list item when clicked, pushing all other items out of the screen. When pulled downwards, the emails collapsed back to their positions. I wanted to recreate this UI. I [...] The post Introducing InboxRecyclerView, a library for building expandable descendant navigation appeared first on Saket Narayan.

## Simplifying DiffUtil with RxJava

DevFeed: [Simplifying DiffUtil with RxJava](<https://devfeed.tech/articles/simplifying-diffutil-with-rxjava-29036.md>)

Original publisher: [Read original article](<https://saket.me/simplifying-diffutil-rxjava/>)

Author: Saket Narayan

Published: 2018-02-18T07:45:54Z

Content type: tutorial

Language: en

Sources: [Saket Narayan](<https://devfeed.tech/sources/saket-narayan.md>)

Topics: [RxJava](<https://devfeed.tech/topics/rxjava.md>), [recyclerview](<https://devfeed.tech/topics/recyclerview.md>), [Code](<https://devfeed.tech/topics/code.md>), [implementation](<https://devfeed.tech/topics/implementation.md>)

Tags: [adapter](<https://devfeed.tech/tags/adapter.md>), [android](<https://devfeed.tech/tags/android.md>), [code](<https://devfeed.tech/tags/code.md>), [generics](<https://devfeed.tech/tags/generics.md>), [recyclerview](<https://devfeed.tech/tags/recyclerview.md>), [rxjava](<https://devfeed.tech/tags/rxjava.md>), [with](<https://devfeed.tech/tags/with.md>)

### AI overview

A tutorial on using RxJava's scan() and compose() operators to simplify DiffUtil implementations for RecyclerView adapter updates and item change animations.

### Source excerpt

One of my favorite parts of RxJava is that no matter how complex a state management usecase is, there's always an operator for that™. During a recent code cleanup, I found a very cool usecase of RxJava's scan() and compose() operators for simplifying the usually verbose DiffUtil implementation. I had been delaying writing this post [...] The post Simplifying DiffUtil with RxJava appeared first on Saket Narayan.

## How To Build A Todo List In Kotlin Part 2: Implementing A RecyclerView

DevFeed: [How To Build A Todo List In Kotlin Part 2: Implementing A RecyclerView](<https://devfeed.tech/articles/how-to-build-a-todo-list-in-kotlin-part-2-implementing-a-recyclerview-22812.md>)

Original publisher: [Read original article](<http://androidessence.com/how-to-build-a-todo-list-in-kotlin-part-2-recyclerview/>)

Author: Adam McNeilly

Published: 2017-05-21T00:00:00Z

Content type: tutorial

Language: en

Sources: [Android Essence](<https://devfeed.tech/sources/android-essence.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Android](<https://devfeed.tech/topics/android.md>), [App](<https://devfeed.tech/topics/app.md>), [Code](<https://devfeed.tech/topics/code.md>), [ui](<https://devfeed.tech/topics/ui.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [GitHub](<https://devfeed.tech/topics/github.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [github](<https://devfeed.tech/tags/github.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [layout](<https://devfeed.tech/tags/layout.md>), [recyclerview](<https://devfeed.tech/tags/recyclerview.md>), [testing](<https://devfeed.tech/tags/testing.md>), [tutorial](<https://devfeed.tech/tags/tutorial.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

This tutorial continues a Kotlin and Android Todo List application by defining a task data model, creating a list-item XML layout, and implementing a RecyclerView adapter. It explains binding task data to UI elements, updating task state, integrating the RecyclerView, and verifying that the list appears.

### Source excerpt

Following up on part 2 which demonstrates how to create your Android app and configure Kotlin, we'll begin building the heart and soul of a Todo List application - the list!

## Writing a RecyclerView Adapter in Kotlin (KAD 16)

DevFeed: [Writing a RecyclerView Adapter in Kotlin (KAD 16)](<https://devfeed.tech/articles/writing-a-recyclerview-adapter-in-kotlin-kad-16-27219.md>)

Original publisher: [Read original article](<https://antonioleiva.com/recyclerview-adapter-kotlin>)

Published: 2017-03-14T00:00:00Z

Content type: tutorial

Language: en

Sources: [Antonio Leiva](<https://devfeed.tech/sources/antonio-leiva.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [recyclerview](<https://devfeed.tech/topics/recyclerview.md>), [Android](<https://devfeed.tech/topics/android.md>), [implementation](<https://devfeed.tech/topics/implementation.md>), [Code](<https://devfeed.tech/topics/code.md>), [data](<https://devfeed.tech/topics/data.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [data-class](<https://devfeed.tech/tags/data-class.md>), [extension-function](<https://devfeed.tech/tags/extension-function.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-android](<https://devfeed.tech/tags/kotlin-android.md>), [recyclerview](<https://devfeed.tech/tags/recyclerview.md>), [viewholder](<https://devfeed.tech/tags/viewholder.md>)

### AI overview

This tutorial explains how to create a simple, immutable RecyclerView Adapter in Kotlin for an Android app. It covers the model, adapter structure and constructor, method implementations, view inflation, and a ViewHolder that maps model values and click listeners to views.

### Source excerpt

Everything Android, Kotlin and other random topics

## Reactive Apps with Model-View-Intent - Part 4: Independent UI Components

DevFeed: [Reactive Apps with Model-View-Intent - Part 4: Independent UI Components](<https://devfeed.tech/articles/reactive-apps-with-model-view-intent-part-4-independent-ui-components-25457.md>)

Original publisher: [Read original article](<https://hannesdorfmann.com/android/mosby3-mvi-4/>)

Author: Hannes Dorfmann

Published: 2017-02-25T09:00:00Z

Content type: tutorial

Language: en

Sources: [Hannes Dorfmann](<https://devfeed.tech/sources/hannes-dorfmann.md>)

Topics: [reactive](<https://devfeed.tech/topics/reactive.md>), [ui](<https://devfeed.tech/topics/ui.md>), [App](<https://devfeed.tech/topics/app.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [blog](<https://devfeed.tech/tags/blog.md>), [design-patterns](<https://devfeed.tech/tags/design-patterns.md>), [flow](<https://devfeed.tech/tags/flow.md>), [recyclerview](<https://devfeed.tech/tags/recyclerview.md>), [shopping](<https://devfeed.tech/tags/shopping.md>), [toolbar](<https://devfeed.tech/tags/toolbar.md>), [ui-components](<https://devfeed.tech/tags/ui-components.md>), [viewmodel](<https://devfeed.tech/tags/viewmodel.md>)

### AI overview

This blog post discusses building independent, reusable UI components in reactive application architectures such as Model-View-Intent, Model-View-Presenter, and Model-View-ViewModel. It argues that presenters should communicate indirectly by observing shared business logic and describes this approach using a shopping-basket example.

### Source excerpt

In this blog post we will discuss how to build independent UI components and clarify why Parent-Child relations are a code smell in my opinion. Furthermore, we will discuss why I think such relations are needless. One question that arises from time to time with architectural design patterns such as Model-View-Intent, Model-View-Presenter or Model-View-ViewModel is how do Presenters (or ViewModels) communicate with each other?

## Kotlin Recipes for Android (II): RecyclerView and DiffUtil

DevFeed: [Kotlin Recipes for Android (II): RecyclerView and DiffUtil](<https://devfeed.tech/articles/kotlin-recipes-for-android-ii-recyclerview-and-diffutil-27220.md>)

Original publisher: [Read original article](<https://antonioleiva.com/recyclerview-diffutil-kotlin>)

Published: 2016-09-12T00:00:00Z

Content type: tutorial

Language: en

Sources: [Antonio Leiva](<https://devfeed.tech/sources/antonio-leiva.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [recyclerview](<https://devfeed.tech/topics/recyclerview.md>), [Android](<https://devfeed.tech/topics/android.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [recyclerview](<https://devfeed.tech/tags/recyclerview.md>)

### AI overview

A Kotlin tutorial showing how to simplify Android RecyclerView updates with DiffUtil. It progresses from direct adapter notifications to delegation and extension functions for calculating item changes and identifying matching items.

### Source excerpt

Everything Android, Kotlin and other random topics

[Next page](<https://devfeed.tech/tags/recyclerview.md?cursor=WyIyMDE2LTA5LTEyVDAwOjAwOjAwKzAwOjAwIiwgIjlhMmU0NzE0LTQ0MDAtNDA3Ni04OTkzLTViMmU5ZWUyMWY4NCJd>)