package Ġcom . aar on . yes pdf . main Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Sparse Boolean Array Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . CheckBox Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . aar on . yes pdf . R Ċ import Ġcom . aar on . yes pdf . common . Empty Holder Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* Ġ@ author ĠA aron Ġa aron zz x up @ gmail . com Ċ Ġ*/ Ċ abstract Ġclass ĠAbstract Adapter < T > Ġ: ĠRecyclerView . Adapter < RecyclerView . ViewHolder > Ġ{ ĊĊĠĠĠ Ġprotected Ġlateinit Ġvar Ġcontext : ĠContext ĊĠĠĠ Ġprotected Ġlateinit Ġvar Ġinflater : ĠLayoutInflater ĊĊĠĠĠ Ġprotected Ġval Ġsource List : ĠList < T > ĊĠĠĠ Ġprotected Ġval Ġselect List : ĠMutable List < T > Ġ= ĠArrayList () ĊĠĠĠ Ġprotected Ġval Ġcheck Array : ĠSparse Boolean Array Ġ= ĠSparse Boolean Array () ĊĊĠĠĠ Ġprotected Ġvar Ġpick Callback : ĠIP ick Callback < T >? Ġ= Ġnull ĊĠĠĠ Ġprotected Ġvar Ġselect Mode Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġcan Select Ġ= Ġtrue ĊĊĠĠĠ Ġconstructor ( pick Callback : ĠIP ick Callback < T >, Ġsource List : ĠList < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . pick Callback Ġ= Ġpick Callback ĊĠĠĠĠĠĠĠ Ġthis . source List Ġ= Ġsource List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( source List : ĠList < T >, Ġcan Select : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . source List Ġ= Ġsource List ĊĠĠĠĠĠĠĠ Ġthis . can Select Ġ= Ġcan Select ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext Ġ= Ġparent . context ĊĠĠĠĠĠĠĠ Ġinflater Ġ= ĠLayoutInflater . from ( context ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( view Type Ġ== ĠTYPE _ EMPTY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEmpty Holder ( in flater . inflate ( R . layout . app _ recycler _ item _ empty view , Ġparent , Ġfalse )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Holder ( parent , Ġview Type ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . setOnClickListener Ġ{ ĠonTap ( this , Ġadapter Position ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( can Select ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . setOn Long ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġ! is ĠEmpty Holder Ġ&& Ġ! select Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpick Callback ?. onStart Pick ing () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Array . put ( adapter Position , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Current ( this , Ġadapter Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect List . add ( source List [ adapter Position ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpick Callback ?. on Selected ( select List , Ġselect List . size Ġ== Ġitem Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect Mode Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Range Changed ( 0 , Ġitem Count , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOn Long ClickListener Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( view Holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbind Holder ( view Holder , Ġposition ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( view Holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt , Ġpayload s : ĠList < Any >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( payload s . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind Holder ( view Holder , Ġposition ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind Holder ( view Holder , Ġposition , Ġpayload s ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġif Ġ( source List . isEmpty ()) Ġ 1 Ġelse Ġitem Count () ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( source List . isEmpty ()) ĠTYPE _ EMPTY Ġelse Ġsuper . getItem ViewType ( position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle CheckBox ( cb : ĠCheckBox , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcb . visibility Ġ= Ġif Ġ( select Mode ) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠĠĠĠĠ Ġif Ġ( select Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcb . alpha Ġ= Ġ 1 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcb . scale X Ġ= Ġ 0 . 8 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcb . scale Y Ġ= Ġ 0 . 8 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcb . isChecked Ġ= Ġcheck Array [ position ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġselect All ( selectAll : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġitem Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Array . put ( index , Ġselect All ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġselect List . clear () ĊĠĠĠĠĠĠĠ Ġif Ġ( selectAll ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġitem Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect List . add ( source List [ index ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpick Callback ?. on Selected ( select List , Ġselect All ) ĊĠĠĠĠĠĠĠ Ġnotify Item Range Changed ( 0 , Ġitem Count , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcancel Select () Ġ{ ĊĠĠĠĠĠĠĠ Ġselect Mode Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġcheck Array . clear () ĊĠĠĠĠĠĠĠ Ġselect List . clear () ĊĠĠĠĠĠĠĠ Ġnotify Item Range Changed ( 0 , Ġitem Count , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġcreate Holder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder ĊĠĠĠ Ġabstract Ġfun Ġbind Holder ( view Holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) ĊĠĠĠ Ġabstract Ġfun Ġbind Holder ( view Holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt , Ġpayload s : ĠList < Any >) ĊĠĠĠ Ġabstract Ġfun Ġitem Count (): ĠInt ĊĠĠĠ Ġabstract Ġfun ĠonTap ( view Holder : ĠRecyclerView . ViewHolder ?, Ġposition : ĠInt ) ĊĠĠĠ Ġabstract Ġfun Ġcheck Current ( view Holder : ĠRecyclerView . ViewHolder ?, Ġposition : ĠInt ) ĊĊĠĠĠ Ġinterface ĠIP ick Callback < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠonStart Pick ing () ĊĠĠĠĠĠĠĠ Ġfun Ġon Selected ( list : ĠList < T >, Ġselect All : ĠBoolean ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTYPE _ EMPTY Ġ= Ġ 1 ĊĠĠĠ Ġ} Ċ }