package Ġcom . co uple blog . adapter Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . co uple blog . R Ċ import Ġcom . co uple blog . fragment . post . CB _ Post Detail Fragment Ċ import Ġcom . co uple blog . model . CB _ Comment Ċ import Ġcom . co uple blog . singleton . CB _ App Func Ċ import Ġcom . google . firebase . database . Child EventListener Ċ import Ġcom . google . firebase . database . Data Snapshot Ċ import Ġcom . google . firebase . database . Database Error Ċ import Ġcom . google . firebase . database . Database Reference Ċ import Ġcom . google . firebase . database . k tx . getValue Ċ Ċ class ĠCB _ Comment Adapter ( private Ġval Ġfragment : ĠCB _ Post Detail Fragment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġcomment Ref : ĠDatabase Reference ) ĊĠĠĠ Ġ: ĠRecyclerView . Adapter < CB _ Comment Adapter . ViewHolder >() Ċ { ĊĠĠĠ Ġcompanion Ġobject ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġstr Tag Ġ= Ġ" Comment Adapter " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġchild EventListener : ĠChild EventListener ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġcomment Key List Ġ= ĠArrayList < String >() ĊĠĠĠ Ġprivate Ġval Ġcomment List Ġ= ĠArrayList < CB _ Comment >() ĊĊĠĠĠ Ġinit ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchild EventListener Ġ= Ġobject Ġ: ĠChild EventListener ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Child Added ( snapshot : ĠData Snapshot , Ġprevious Child Name : ĠString ?) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠComment ĠìķĦ ìĿ´ íħľ ìĿ´ Ġì¶Ķê°Ģ ëĲľ Ġìĥģ íĻ © ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomment Ġ= Ġsnapshot . getValue < CB _ Comment >() ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Key List . add ( snapshot . key !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment List . add ( comment !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( comment List . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Child Changed ( snapshot : ĠData Snapshot , Ġprevious Child Name : ĠString ?) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠComment ĠìķĦ ìĿ´ íħľ ìĿ´ Ġë³Ģê²½ ìĿ´ ĠëĲľ Ġê²½ìļ° ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠìĥĪ Ġìłķë³´ ë¥¼ Ġë°Ľ ìķĦ ìĺ ¨ ëĭ¤ . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Comment Ġ= Ġsnapshot . getValue < CB _ Comment >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomment Key Ġ= Ġsnapshot . key ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġíķ´ëĭ¹ ĠìľĦ ì¹ĺ Ġìłķë³´ ìĿĺ ĠìĿ¸ ëį ± ìĬ¤ ë¥¼ Ġì° ¾ ëĬĶ ëĭ¤ . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomment Idx Ġ= Ġcomment Key List . indexOf ( comment Key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( comment Idx Ġ> Ġ- 1 Ġ&& Ġnew Comment Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠìĿ´ ìłĦ ìĹĲ ĠìŀĪ ëį ĺ Ġëį°ìĿ´íĦ° ìĿ´ ê³ł ĠìĥĪ ë¡ľ ìļ´ Ġìłķë³´ ê°Ģ Ġìłľ ëĮĢ ë¡ľ Ġëĵ¤ ìĸ´ ìĺ ¨ Ġê²½ìļ° ìĹĲ Ġì²ĺë¦¬ íķľëĭ¤ . Ġë¡ľ ì» ¬ Ġìłķë³´ Ġê° ± ìĭł ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment List [ comment Idx ] Ġ= Ġnew Comment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( comment Idx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( str Tag , Ġ" on Child Changed : unknown Ġdata ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Child Removed ( snapshot : ĠData Snapshot ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠComment ĠìķĦ ìĿ´ íħľ ìĿ´ ĠìĤ Ń ìłľ ëĲľ Ġê²½ìļ° ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomment Key Ġ= Ġsnapshot . key ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomment Idx Ġ= Ġcomment Key List . indexOf ( comment Key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( comment Idx Ġ> Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġíķ´ëĭ¹ ĠìķĦ ìĿ´ íħľ ìĿĦ ĠìĤ Ń ìłľ íķľëĭ¤ . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Key List . remove At ( comment Idx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment List . remove At ( comment Idx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Removed ( comment Idx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( str Tag , Ġ" on Child Removed : unknown Ġdata ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġdon 't Ġsupport Ġon Child Moved ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Child Moved ( snapshot : ĠData Snapshot , Ġprevious Child Name : ĠString ? ){} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Cancelled ( error : ĠDatabase Error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( str Tag , Ġ" on Cancelled : comment Ġlist ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġregister Ġchild EventListener Ġto Ġcomment Ref ĊĠĠĠĠĠĠĠ Ġcomment Ref . addChild EventListener ( child EventListener ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġkeep Ġit Ġso Ġit Ġcan Ġbe Ġremoved Ġon Ġapp Ġstop ĊĠĠĠĠĠĠĠ Ġthis . child EventListener Ġ= Ġchild EventListener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear Listener () ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġchild EventListener ?. let Ġ{ Ġcomment Ref . removeEventListener ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠViewHolder ( private Ġval Ġbinding : ĠComment Item Binding ) Ġ: ĠRecyclerView . ViewHolder ( binding . root ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġbind ( arg Fragment : ĠCB _ Post Detail Fragment , Ġarg Comment Key : ĠString , Ġarg Comment : ĠCB _ Comment ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment ĠĠĠ Ġ= Ġarg Fragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Data Ġ= Ġarg Comment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Key Ġ Ġ= Ġarg Comment Key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Pending Bindings () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( view Group : ĠViewGroup , Ġview Type : ĠInt ): ĠViewHolder Ġ= ĊĠĠĠĠĠĠĠ ĠData Binding Util . inflate < Comment Item Binding >( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( view Group . context ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . cb _ comment _ item , Ġview Group , Ġfalse ĊĠĠĠĠĠĠĠ Ġ). let Ġ{ ĠViewHolder ( it ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠViewHolder , Ġposition : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠ Ġholder . bind ( fragment , Ġcomment Key List [ position ], Ġcomment List [ position ]) ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġcomment List . size Ċ Ċ }