package Ġcom . ang cy o . dsl adapter . demo Ċ Ċ import Ġandroid . graphics . Color Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroid . widget . Toast Ċ import Ġcom . ang cy o . dsl adapter .* Ċ import Ġcom . ang cy o . dsl adapter . dsl . Dsl Demo Item Ċ import Ġkotlin . random . Random . Default . nextInt Ċ Ċ /** Ċ Ġ* Ċ Ġ* ĠEmail : ang cy o @ 1 2 6 . com Ċ Ġ* Ġ@ author Ġang cy o Ċ Ġ* Ġ@ date Ġ 2 0 1 9 / 1 0 / 1 6 Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 ĠSh en Z hen ĠO & M ĠCloud ĠCo ., ĠLtd . ĠAll Ġrights Ġreserved . Ċ Ġ*/ Ċ class ĠSelector Demo Activity Ġ: ĠBase Recycler Activity () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġget Base Layout Id (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠR . layout . activity _ selector _ demo ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// åĽºå®ļ éĢī ä¸Ń ĊĠĠĠ Ġval Ġfixed ItemList Ġ= Ġmutable ListOf < Dsl Adapter Item >() ĊĠĠĠ Ġvar Ġis Selector All Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġon Init Base Layout After () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Init Base Layout After () ĊĊĠĠĠĠĠĠĠ Ġ// æ»ĳ åĬ¨ éĢīæĭ© æĶ¯æĮģ ĊĠĠĠĠĠĠĠ Ġre cyclerView . add On Item Touch Listener ( Sl iding Selector Helper ( application Context , Ġd sl Adapter )) ĊĊĠĠĠĠĠĠĠ Ġ// åįķ éĢī / å¤ļ éĢī Ġ çĽĳåĲ¬ ĊĠĠĠĠĠĠĠ Ġd sl Adapter . item Selector Helper . on Item Selector Listener Ġ= Ġobject Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOn Item Selector Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Selector Item Change ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselector Items : ĠMutable List < Dsl Adapter Item >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselector Index List : ĠMutable List < Int >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Selector All : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselector Params : ĠSelector Params ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Selector Item Change ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselector Items , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselector Index List , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Selector All , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselector Params ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Selector Demo Activity . is Selector All Ġ= Ġis Selector All ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd sl ViewHolder . tv ( R . id . tip _ view ). text Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Selector All Ġ-> Ġ" åħ¨éĥ¨ éĢī ä¸Ń , Ġ åħ± Ġ${ selector Items . size } Ġ é¡¹ " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselector Items . isEmpty () Ġ-> Ġ" æľª éĢī ä¸Ń " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" éĢī ä¸Ń : Ġ${ selector Items . size } Ġ é¡¹ " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// æİ§åĪ¶ æĮīéĴ® äºĭä»¶ ĊĠĠĠĠĠĠĠ Ġd sl ViewHolder . click ( R . id . normal ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Adapter . item Selector Helper . selector All ( Selector Params ( selector Ġ= Ġfalse . to Select Option ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Adapter . item Selector Helper . selector Model Ġ= ĠMODEL _ NORMAL ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġd sl ViewHolder . click ( R . id . single ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Adapter . item Selector Helper . selector All ( Selector Params ( selector Ġ= Ġfalse . to Select Option ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Adapter . item Selector Helper . selector Model Ġ= ĠMODEL _ SINGLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġd sl ViewHolder . click ( R . id . multi ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Adapter . item Selector Helper . selector All ( Selector Params ( selector Ġ= Ġfalse . to Select Option ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Adapter . item Selector Helper . selector Model Ġ= ĠMODEL _ MULTI ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġd sl ViewHolder . click ( R . id . all ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Adapter . item Selector Helper . selector Model Ġ= ĠMODEL _ MULTI ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Adapter . item Selector Helper . selector All ( Selector Params ( selector Ġ= Ġ(! is Selector All ). to Select Option ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġre cyclerView . layout Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGrid LayoutManager ( this , Ġ 4 ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Span Size Lookup ( dsl Adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// æ¸²æŁĵ adapter æķ°æį® ĊĠĠĠĠĠĠĠ Ġrender Adapter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// é»ĺè®¤ çļĦ éĢīæĭ© æ¨¡å¼ı ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Selector Helper . selector Model Ġ= ĠMODEL _ MULTI ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĪĩæį¢ åĪ° åĬłè½½ ä¸Ń ... ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Adapter Status ( Dsl Adapter Status Item . ADAPTER _ STATUS _ LOADING ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// æ¨¡ æĭŁ ç½ĳç»ľ æĵįä½ľ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd sl ViewHolder . post Delay ( 1 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Adapter Status ( Dsl Adapter Status Item . ADAPTER _ STATUS _ NONE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Refresh () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" éķ¿ æĮī Item , Ġåı¯ä»¥ æ»ĳ åĬ¨ éĢīæĭ© ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Refresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Refresh () ĊĠĠĠĠĠĠĠ Ġd sl Adapter . reset Item ( listOf ()) ĊĠĠĠĠĠĠĠ Ġrender Adapter Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. nextInt ( 1 6 0 , Ġ 3 6 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Item ( Dsl Demo Item ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĪĿå§ĭåĮĸ åĽºå®ļ åĪĹè¡¨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ< Ġ 1 0 Ġ&& Ġi Ġ% Ġ 3 Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfixed ItemList . add ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon SetItem Offset Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġ 1 0 Ġ* Ġdpi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . set ( 0 , Ġoffset , Ġoffset , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Group Params . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Edge Left ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . left Ġ= Ġ 1 0 Ġ* Ġdpi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Edge Group Bottom ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . bottom Ġ= Ġ 1 0 Ġ* Ġdpi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Item Bind Override Ġ= Ġ{ Ġitem Holder , Ġitem Position , Ġadapter Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Holder . item View . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset BackgroundColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfixed ItemList . contains ( adapter Item ) Ġ-> ĠColor . GRAY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Is Selected Ġ-> ĠColor . GREEN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠColor . WHITE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Holder . tv ( R . id . text _ view ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġ 1 0 0 Ġ* Ġdpi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" éĢī æĪĳ Ġ$ item Position Ġ\ n ${ if Ġ( item Is Selected ) Ġ" true " Ġelse Ġ" false "} " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Item Click Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Item Selector (! item Is Selected ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Dispatch Updates After Once Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Selector Helper . fixed Selector ItemList Ġ= Ġfixed ItemList ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ