package Ġcom . i 4 ever ca i . android . support . adapter Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . annotation . Drawable Res Ċ import Ġandroidx . annotation . String Res Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . recyclerview . widget . St agger ed Grid LayoutManager Ċ import Ġcom . air bnb . lott ie . Lot tie Composition Ċ import Ġcom . air bnb . lott ie . On Composition Loaded Listener Ċ import Ġcom . i 4 ever ca i . android . support . R Ċ import Ġcom . i 4 ever ca i . android . support . widget . RecyclerView . Base ViewHolder Ċ import Ġkotlinx . android . synt hetic . main . support _ item _ empty . view .* Ċ Ċ /** Ċ Ġ* Ċ Ġ* Ġ@ Description : ĠBase Recycler Adapter Ċ Ġ* Ġ@ author ĠF itz Ċ Ġ* Ġ@ email ĠF itz Pro @ qq . com Ċ Ġ* Ġ@ date Ġ 2 0 1 7 / 9 / 4 Ġ 1 4 : 3 9 Ċ Ġ* Ġ@ version ĠV 1 . 0 Ċ Ġ*/ Ċ abstract Ġclass ĠBase Recycler Adapter < VH Ġ: ĠRecyclerView . ViewHolder > Ġ: ĠRecyclerView . Adapter < RecyclerView . ViewHolder > Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠS _ TYPE _ EMPTY Ġ= Ġ- 2 5 5 5 5 4 1 1 ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEMPTY _ NOTICE _ STATUS _ LOADING Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEMPTY _ NOTICE _ STATUS _ NO _ DATA Ġ= Ġ 2 ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġval ĠmContext : ĠContext ĊĠĠĠ Ġprotected Ġvar Ġm Is Show Empty View Ġ= Ġtrue ĊĠĠĠ Ġprotected Ġvar Ġm Loading Lot tie Anim Name : ĠString Ġ= Ġ" support _ empty _ loading _ lott ie . json " ĊĠĠĠ Ġprotected Ġvar Ġm Loading Msg : ĠString Ġ= Ġ"" ĊĠĠĠ Ġprotected Ġvar Ġm Loading ImageView Res Id : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprotected Ġvar Ġm Empty Lot tie Anim Name : ĠString Ġ= Ġ" support _ empty _ no _ data _ lott ie . json " ĊĠĠĠ Ġprotected Ġvar Ġm Empty Msg : ĠString Ġ= Ġ"" ĊĠĠĠ Ġprotected Ġvar Ġm Empty ImageView Res Id : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprotected Ġvar Ġm Empty Status : ĠInt Ġ= ĠEMPTY _ NOTICE _ STATUS _ NO _ DATA ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġthis ( context , Ġtrue ) ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġshow Empty View : ĠBoolean ) Ġ: Ġsuper () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . mContext Ġ= Ġcontext ĊĠĠĠĠĠĠĠ Ġthis . m Is Show Empty View Ġ= Ġshow Empty View ĊĠĠĠĠĠĠĠ Ġthis . m Loading Msg Ġ= Ġcontext . resources . getString ( R . string . support _ recycler _ empty _ loading _ msg ) ĊĠĠĠĠĠĠĠ Ġthis . m Empty Msg Ġ= Ġcontext . resources . getString ( R . string . support _ recycler _ empty _ no _ data _ msg ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġempty Lot tie Anim Name : ĠString , Ġempty Msg : ĠString ) Ġ: Ġsuper () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . mContext Ġ= Ġcontext ĊĠĠĠĠĠĠĠ Ġthis . m Empty Lot tie Anim Name Ġ= Ġempty Lot tie Anim Name ĊĠĠĠĠĠĠĠ Ġthis . m Empty Msg Ġ= Ġempty Msg ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġempty Lot tie Anim Name : ĠString , Ġ@ String Res Ġempty Msg Res : ĠInt ) Ġ: Ġsuper () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . mContext Ġ= Ġcontext ĊĠĠĠĠĠĠĠ Ġthis . m Empty Lot tie Anim Name Ġ= Ġempty Lot tie Anim Name ĊĠĠĠĠĠĠĠ Ġthis . m Empty Msg Ġ= Ġcontext . getString ( empty Msg Res ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġ@ Drawable Res Ġm Empty ImageView Res Id : ĠInt , Ġ@ String Res Ġempty Msg Res : ĠInt ) Ġ: Ġsuper () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . mContext Ġ= Ġcontext ĊĠĠĠĠĠĠĠ Ġthis . m Empty ImageView Res Id Ġ= Ġm Empty ImageView Res Id ĊĠĠĠĠĠĠĠ Ġthis . m Empty Msg Ġ= Ġcontext . getString ( empty Msg Res ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġ@ String Res Ġempty Msg Res : ĠInt ) Ġ: Ġsuper () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . mContext Ġ= Ġcontext ĊĠĠĠĠĠĠĠ Ġthis . m Empty Msg Ġ= Ġcontext . getString ( empty Msg Res ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġempty Msg : ĠString ) Ġ: Ġsuper () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . mContext Ġ= Ġcontext ĊĠĠĠĠĠĠĠ Ġthis . m Empty Msg Ġ= Ġempty Msg ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġupdate Empty Notice Status ( notice Status : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Empty Status Ġ= Ġnotice Status ĊĠĠĠĠĠĠĠ Ġif Ġ( get Adapter ItemCount () Ġ== Ġ 0 Ġ&& Ġm Is Show Empty View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġupdate Empty ViewData ( empty Lot tie Anim Name : ĠString ,@ Drawable Res Ġempty ImageView Res Id : ĠInt , Ġ@ String Res Ġempty Msg Res : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Empty ViewData ( empty Lot tie Anim Name , empty ImageView Res Id , ĠmContext . getString ( empty Msg Res )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġupdate Empty ViewData ( empty Lot tie Anim Name : ĠString ,@ Drawable Res Ġempty ImageView Res Id : ĠInt , Ġempty Msg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . m Empty Lot tie Anim Name Ġ= Ġempty Lot tie Anim Name ĊĠĠĠĠĠĠĠ Ġthis . m Empty Msg Ġ= Ġempty Msg ĊĠĠĠĠĠĠĠ Ġthis . m Empty ImageView Res Id Ġ= Ġempty ImageView Res Id ĊĠĠĠĠĠĠĠ Ġif Ġ( get Adapter ItemCount () Ġ== Ġ 0 Ġ&& Ġm Is Show Empty View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfinal Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( get Adapter ItemCount () Ġ== Ġ 0 Ġ&& Ġm Is Show Empty View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Adapter ItemCount () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfinal Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( get Adapter ItemCount () Ġ== Ġ 0 Ġ&& Ġm Is Show Empty View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠS _ TYPE _ EMPTY ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Adapter Item ViewType ( position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isEmpty ViewHolder ( holder )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Bind Empty ViewHolder ( holder ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Bind Adapter ViewHolder ( holder Ġas ĠV H , Ġposition ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfinal Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( S _ TYPE _ EMPTY Ġ== Ġview Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Empty ViewHolder ( parent ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠonCreate Adapter ViewHolder ( parent , Ġview Type ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġget Empty ViewHolder ( parent : ĠViewGroup ?): ĠRecyclerView . ViewHolder Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn ĠEmpty ViewHolder ( mContext , Ġparent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Bind Empty ViewHolder ( holder : ĠRecyclerView . ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( holder Ġis ĠEmpty ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġempty ViewHolder : ĠEmpty ViewHolder Ġ= Ġholder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Empty Status Ġ== ĠEMPTY _ NOTICE _ STATUS _ LOADING ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty ViewHolder . setData ( m Loading Lot tie Anim Name , Ġm Loading ImageView Res Id , m Loading Msg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty ViewHolder . setData ( m Empty Lot tie Anim Name , Ġm Empty ImageView Res Id , m Empty Msg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪ¤æĸŃ æĺ¯åĲ¦ æĺ¯ Empty ViewHolder ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠisEmpty ViewHolder ( holder : ĠRecyclerView . ViewHolder ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġholder Ġis ĠEmpty ViewHolder ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġclass ĠEmpty ViewHolder Ġ: ĠBase ViewHolder , ĠOn Composition Loaded Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcontext : ĠContext ĊĊĠĠĠĠĠĠĠ Ġconstructor ( context : ĠContext , Ġparent : ĠViewGroup ?) Ġ: Ġsuper ( context , Ġparent , ĠR . layout . support _ item _ empty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . context Ġ= Ġcontext ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠsetData ( empty Lot tie Anim Name : ĠString , Ġempty Drawable Res : ĠInt , Ġempty Msg : ĠString ) Ġ= Ġwith ( item View ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( empty Drawable Res Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupport Lot tie View . cancel Animation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupport Lot tie View . setImage Resource ( empty Drawable Res ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠL ot tie Composition . Factory . from Asset FileName ( context , Ġempty Lot tie Anim Name , Ġthis @ Empty ViewHolder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġsupport Iv Empty Notice . setImage Resource ( empty Icon Res ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport Tv Empty Msg . text Ġ= Ġempty Msg ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Composition Loaded ( composition : ĠL ot tie Composition ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( composition Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( item View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupport Lot tie View . set Composition ( composition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupport Lot tie View . play Animation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attached To RecyclerView ( re cyclerView : ĠRecyclerView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= Ġre cyclerView . layout Manager ĊĠĠĠĠĠĠĠ Ġif Ġ( manager Ġis ĠGrid LayoutManager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . span Size Lookup Ġ= Ġobject Ġ: ĠGrid LayoutManager . Span Size Lookup () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Span Size ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠgetItem ViewType ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspan Count Ġ= Ġmanager . span Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠS _ TYPE _ EMPTY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġspan Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Grid LayoutManager Span Size ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Attached To RecyclerView ( re cyclerView ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Attached To Window ( holder : ĠRecyclerView . ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( holder Ġis ĠEmpty ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlp Ġ= Ġholder . item View . layout Params ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lp Ġ!= Ġnull Ġ&& Ġlp Ġis ĠSt agger ed Grid LayoutManager . LayoutParams ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( holder Ġis ĠEmpty ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlp . is Full Span Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on View Attached To Window ( holder ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġget Grid LayoutManager Span Size ( position : ĠInt ): ĠInt Ġ= Ġ 1 ĊĊĠĠĠ Ġopen Ġfun Ġget Adapter Item ViewType ( position : ĠInt ): ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġabstract Ġfun Ġget Adapter ItemCount (): ĠInt ĊĊĠĠĠ Ġabstract Ġfun ĠonCreate Adapter ViewHolder ( parent : ĠViewGroup ?, Ġview Type : ĠInt ): ĠV H ĊĠĠĠ Ġabstract Ġfun Ġon Bind Adapter ViewHolder ( holder : ĠV H , Ġposition : ĠInt ) ĊĊ Ċ }