package Ġcom . yj . add words Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . yj . add words . model . Item Word DTO Ċ Ċ // ĠAdapter Ġì º Ĳ ë¦¬ ìĸ´ ĠViewHolder ëĬĶ ĠìĿ¸ íĦ° ìħ ī íĦ° Ċ class ĠMy Word Recycler Adapter 2 : ĠRecyclerView . Adapter < RecyclerView . ViewHolder >{ ĊĊĠĠĠ Ġ// ĠĠĠ Ġpublic Ġstatic Ġfinal ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠHEADER : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCH ILD : ĠInt Ġ= Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġdata Ġ: ĠArrayList < Item Word DTO > ĊĊĠĠĠ Ġconstructor Ġ( data Ġ: ĠArrayList < Item Word DTO >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . data Ġ= Ġdata ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠMy Word ViewHolder 2 Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġview Ġ: ĠView ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġcontext Ġ: ĠContext Ġ= Ġparent . context ĊĠĠĠĠĠĠĠ Ġvar Ġdp Ġ Ġ= Ġcontext . resources . display Metrics . density ĊĠĠĠĠĠĠĠ Ġvar Ġsub Item Padding Left Ġ= Ġ( 2 4 Ġ* Ġdp ). toInt () ĊĠĠĠĠĠĠĠ Ġvar Ġsub Item Padding Top And Bottom Ġ= Ġ( 6 Ġ* Ġdp ). toInt () ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( view Type ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHEADER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġinflater Ġ: ĠLayoutInflater Ġ= Ġparent . context . getSystem Service ( Context . LAYOUT _ IN FL ATER _ SERVICE ) Ġas ĠLayoutInflater ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Ġ= Ġinflater . inflate ( R . layout . list _ header , parent , false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġheader Ġ= ĠMy Word ViewHolder 2 ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġheader ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġëĭ¨ ìĸ´ Ġê°ľ ìĪĺ , Ġí į¼ ìĦ ¼ íĬ¸ Ġì¶Ķê°Ģ íķ´ìķ¼ íķ¨ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCH ILD Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġitem TextView Ġ= ĠTextView ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem TextView . set Padding ( sub Item Padding Left , Ġsub Item Padding Top And Bottom , 0 , sub Item Padding Top And Bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem TextView . setTextColor ( Color . parse Color ("# 0 0 0 0 0 0 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem TextView . layout Params Ġ= ĠViewGroup . LayoutParams ( ViewGroup . LayoutParams . MATCH _ PARENT , ĠViewGroup . LayoutParams . WRAP _ CONTENT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMy Word ViewHolder 2 ( item TextView ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ ĠìĺĪ ìłľ ìĹĲ ìĦł Ġnull ĊĠĠĠĠĠĠĠ Ġreturn ĠMy Word ViewHolder 2 ( LayoutInflater . from ( parent . context ). inflate ( R . layout . rv _ word book _ list , Ġparent , Ġfalse )) ĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ ĠíķĺëĤĺ íķĺ ëĤĺ ĠìĥĿìĦ± ëĲ ł Ġë ĸ Ħ Ġë§ Īëĭ¤ Ġíĺ¸ì¶ľ ìĿ´ ëĲĺ ëĭĪ ê¹Į Ġíı¬ ì§Ģ ìħĺ ìĿĦ Ġìķ Īëĭ¤ ĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġholder . bind ( this . my Word List DTO [ position ]) ĊĠĠĠĠĠĠĠ Ġval Ġitem Word DTO Ġ= Ġdata [ position ] ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item Word DTO . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHEADER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Controller Ġ: ĠMy Word ViewHolder 2 Ġ= Ġholder Ġas ĠMy Word ViewHolder 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Controller . re ffer al Item Ġ= Ġitem Word DTO ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Controller . header Title ?. text Ġ= Ġitem Word DTO . text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item Word DTO . invisible Children Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Controller . btn Expand Toggle ?. setImage Resource ( R . drawable . ic _ baseline _ keyboard _ arrow _ up _ 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Controller . btn Expand Toggle ?. setImage Resource ( R . drawable . ic _ baseline _ keyboard _ arrow _ down _ 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Controller . btn Expand Toggle ?. setOnClickListener ( View . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( item Word DTO . invisible Children Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Word DTO . invisible Children Ġ= ĠArrayList < Item Word DTO >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpos Ġ= Ġdata . indexOf ( item Controller . re ffer al Item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( data . size Ġ> Ġpos Ġ+ Ġ 1 Ġ&& Ġdata [ pos Ġ+ Ġ 1 ]. type Ġ== ĠCH ILD ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Word DTO . invisible Children ?. add ( data . remove At ( pos Ġ+ Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Range Removed ( pos Ġ+ Ġ 1 , Ġcount ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Controller . btn Expand Toggle ?. setImage Resource ( R . drawable . ic _ baseline _ keyboard _ arrow _ down _ 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpos Ġ= Ġdata . indexOf ( item Controller . re ffer al Item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġpos Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġitem Word DTO . invisible Children !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . add ( index , Ġi ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Range Inserted ( pos Ġ+ Ġ 1 , Ġindex Ġ- Ġpos Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Controller . btn Expand Toggle ?. setImage Resource ( R . drawable . ic _ baseline _ keyboard _ arrow _ up _ 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Word DTO . invisible Children Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ// Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCH ILD Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġitem TextView Ġ= Ġholder . item View Ġas ĠTextView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem TextView . text Ġ= Ġdata [ position ]. text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdata [ position ]. type ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . data . size ĊĠĠĠ Ġ} ĊĊ Ċ } ĊĊ