package Ġcom . fore tree . sh library app . ui . adapter Ċ Ċ import Ġandroid . support . annotation . Layout Res Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġsil en Ġon Ġ 2 8 / 0 1 / 2 0 1 8 . Ċ Ġ*/ Ċ abstract Ġclass ĠAbstract Recycler Adapter < T , ĠV H Ġ: ĠRecyclerView . ViewHolder >( data : ĠMutable List < T >) Ġ: ĠRecyclerView . Adapter < VH >() Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġm Data : ĠMutable List < T > Ġ= Ġdata ĊĠĠĠ Ġprotected Ġvar Ġm On ItemClickListener : ĠOn ItemClickListener ? Ġ= Ġnull ĊĠĠĠ Ġprotected Ġvar Ġm Item Long ClickListener : ĠOn Item Long ClickListener ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠV H , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġitem : ĠT ? ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ= Ġm Data [ position ] ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIndex OutOfBoundsException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . on Bind ViewHolder ( holder , Ġposition , Ġitem ) ĊĠĠĠĠĠĠĠ Ġif Ġ( holder . item View Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m On ItemClickListener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . setOnClickListener ( On ItemClickListener Impl ( this , Ġposition )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Item Long ClickListener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . setOn Long ClickListener ( On Item Long ClickListener Impl ( this , Ġposition )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġon Bind ViewHolder ( holder : ĠV H , Ġposition : ĠInt , Ġitem : ĠT ?) ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Data . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ æĿ¡ çĽ® æķ°æį® ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġposition Ġ è¦ģ èİ·åıĸ çļĦ å¯¹è±¡ åľ¨ éĢĤ éħį åĻ¨ ä¸ŃçļĦ ä½įç½® ĊĠĠĠĠ Ġ* Ġ@ return Ġposition ä½įç½® çļĦ å¯¹è±¡ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetItem ( position : ĠInt ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Data [ position ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ·»åĬł ä¸Ģä¸ª æĿ¡ çĽ® ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġitem Ġ è¦ģ æ·»åĬł çļĦæķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Item ( item : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Data . add ( item ) ĊĠĠĠĠĠĠĠ Ġnotify Item Inserted ( m Data . size Ġ- Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ·»åĬł ä¸Ģä¸ª æĿ¡ çĽ® åĪ° position ä½įç½® ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġposition ĠæĮĩå®ļ çļĦ ä½įç½® ĊĠĠĠĠ Ġ* Ġ@ param Ġitem ĠĠĠĠ Ġ è¦ģ æ·»åĬł çļĦæķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Item ( position : ĠInt , Ġitem : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Data . add ( position , Ġitem ) ĊĠĠĠĠĠĠĠ Ġnotify Item Inserted ( position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ·»åĬł å¤ļä¸ª æĿ¡ çĽ® ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlist Ġ è¦ģ æ·»åĬł çļĦæķ°æį® éĽĨåĲĪ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Item All ( list : ĠList < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġold Size Ġ= Ġm Data . size ĊĠĠĠĠĠĠĠ Ġm Data . addAll ( list ) ĊĠĠĠĠĠĠĠ Ġnotify Item Range Inserted ( old Size , Ġlist . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ·»åĬł å¤ļä¸ª æĿ¡ çĽ® åĪ° position ä½įç½® ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġposition ĠĠ ĠæĮĩå®ļ çļĦ ä½įç½® ĊĠĠĠĠ Ġ* Ġ@ param Ġlist Ġ è¦ģ æ·»åĬł çļĦæķ°æį® éĽĨåĲĪ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Item All ( position : ĠInt , Ġlist : ĠList < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Data . addAll ( position , Ġlist ) ĊĠĠĠĠĠĠĠ Ġnotify Item Range Inserted ( position , Ġlist . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪłéĻ¤ ä¸Ģä¸ª æĿ¡ çĽ® ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ ä¸ºäºĨ éģ¿åħį notify Item Removed åĲİ å¯¼èĩ´ position éĶĻ ä¹± , æīĢä»¥ åĨį è°ĥçĶ¨ notify Item Range Changed åĪ·æĸ° position ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġposition Ġ è¦ģ åĪłéĻ¤ çļĦ ä½įç½® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Item ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Data . remove At ( position ) ĊĠĠĠĠĠĠĠ Ġnotify Item Removed ( position ) ĊĠĠĠĠĠĠĠ Ġnotify Item Range Changed ( position , Ġm Data . size ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪłéĻ¤ å¤ļä¸ª æĿ¡ çĽ® ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlist Ġ è¦ģ åĪłéĻ¤ çļĦæķ°æį® éĽĨåĲĪ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Item All ( list : ĠList < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Data . removeAll ( list ) ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ¸ ħ ç©º éĢĤ éħį åĻ¨ æķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Data . clear () ĊĠĠĠĠĠĠĠ Ġ// notify DataSet Changed (); ĊĠĠĠĠĠĠĠ Ġnotify Item Range Removed ( 0 , Ġm Data . size ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun ĠgetData (): ĠList < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Data ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset On ItemClickListener ( on ItemClickListener : ĠOn ItemClickListener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . m On ItemClickListener Ġ= Ġon ItemClickListener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset On Item Long ClickListener ( on Item Long ClickListener : ĠOn Item Long ClickListener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . m Item Long ClickListener Ġ= Ġon Item Long ClickListener ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĿ¡ çĽ® çĤ¹åĩ» ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinterface ĠOn ItemClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Item Click ( adapter : ĠAbstract Recycler Adapter < *, Ġ* >, Ġview : ĠView , Ġposition : ĠInt ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĿ¡ çĽ® éķ¿ æĮī ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinterface ĠOn Item Long ClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Item Long Click ( adapter : ĠAbstract Recycler Adapter < *, Ġ* >, Ġview : ĠView , Ġposition : ĠInt ): ĠBoolean ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġclass ĠOn ItemClickListener Impl ( adapter : ĠAbstract Recycler Adapter < *, Ġ* >, Ġprivate Ġval Ġm Position : ĠInt ) Ġ: ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġm Adapter : ĠAbstract Recycler Adapter < *, Ġ*> Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Adapter . m On ItemClickListener !!. on Item Click ( m Adapter , Ġv , Ġm Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġclass ĠOn Item Long ClickListener Impl ( adapter : ĠAbstract Recycler Adapter < *, Ġ* >, Ġprivate Ġval Ġm Position : ĠInt ) Ġ: ĠView . On Long ClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġm Adapter : ĠAbstract Recycler Adapter < *, Ġ*> Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Long Click ( v : ĠView ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Adapter . m Item Long ClickListener !!. on Item Long Click ( m Adapter , Ġv , Ġm Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ abstract Ġclass ĠRe cycler Holder < T >( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĊĠĠĠ Ġconstructor ( parent : ĠViewGroup ?, Ġ@ Layout Res Ġlayout Id : ĠInt ) Ġ: Ġthis ( LayoutInflater . from ( parent ?. context ). inflate ( layout Id , Ġparent , Ġfalse )) ĊĊĠĠĠ Ġabstract Ġfun Ġon Bind ViewHolder ( position : ĠInt , Ġitem : ĠT ) Ċ } ĊĊ