@ file : Suppress (" Matching Declaration Name ") Ċ Ċ package Ġreactive circ us . flow binding . android . widget Ċ Ċ import Ġandroid . widget . Abs ListView Ċ import Ġandroidx . annotation . Check Result Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . channels . await Close Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . callback Flow Ċ import Ġkotlinx . coroutines . flow . conf late Ċ import Ġreactive circ us . flow binding . common . check MainThread Ċ import Ġreactive circ us . flow binding . common . safe Offer Ċ Ċ /** Ċ Ġ* ĠCreate Ġa Ġ[ Flow ] Ġof Ġscroll Ġevents Ġon Ġthe Ġ[ Abs ListView ] Ġinstance . Ċ Ġ* Ċ Ġ* ĠNote : ĠCreated Ġflow Ġkeeps Ġa Ġstrong Ġreference Ġto Ġthe Ġ[ Abs ListView ] Ġinstance Ċ Ġ* Ġuntil Ġthe Ġcoroutine Ġthat Ġlaunched Ġthe Ġflow Ġcollector Ġis Ġcancelled . Ċ Ġ* Ċ Ġ* ĠExample Ġof Ġusage : Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* Ġabs ListView . scroll Events () Ċ Ġ* ĠĠĠĠ Ġ. on Each Ġ{ Ġevent Ġ-> Ċ Ġ* ĠĠĠĠĠĠĠĠĠ Ġ// Ġhandle Ġscroll Ġevent Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* ĠĠĠĠ Ġ. launch In ( ui Scope ) Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ @ Check Result Ċ @ Use Experimental ( Experimental Cor outines Api :: class ) Ċ fun ĠAbs ListView . scroll Events (): ĠFlow < Scroll Event > Ġ= Ġcallback Flow < Scroll Event > Ġ{ ĊĠĠĠ Ġcheck MainThread () ĊĠĠĠ Ġval Ġlistener Ġ= Ġobject Ġ: ĠAbs ListView . On Scroll Listener Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcurrent Scroll State Ġ= ĠAbs ListView . On Scroll Listener . SCROLL _ STATE _ IDLE ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Scroll StateChanged ( abs ListView : ĠAbs ListView , Ġscroll State : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Scroll State Ġ= Ġscroll State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsafe Offer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScroll Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Ġ= Ġthis @ scroll Events , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll State Ġ= Ġscroll State , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Visible Item Ġ= Ġfirst Visible Position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisible ItemCount Ġ= Ġchild Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal ItemCount Ġ= Ġcount ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Scroll ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġabs ListView : ĠAbs ListView , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Visible Item : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisible ItemCount : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal ItemCount : ĠInt ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsafe Offer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScroll Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Ġ= Ġthis @ scroll Events , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll State Ġ= Ġcurrent Scroll State , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Visible Item Ġ= Ġfirst Visible Item , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisible ItemCount Ġ= Ġvisible ItemCount , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal ItemCount Ġ= Ġtotal ItemCount ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġset On Scroll Listener ( listener ) ĊĠĠĠ Ġawait Close Ġ{ Ġset On Scroll Listener ( null ) Ġ} Ċ }. conf late () Ċ Ċ class ĠScroll Event ( ĊĠĠĠ Ġval Ġview : ĠAbs ListView , ĊĠĠĠ Ġval Ġscroll State : ĠInt , ĊĠĠĠ Ġval Ġfirst Visible Item : ĠInt , ĊĠĠĠ Ġval Ġvisible ItemCount : ĠInt , ĊĠĠĠ Ġval Ġtotal ItemCount : ĠInt Ċ ) Ċ