
рдореИрдВрдиреЗ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рджреЗрдЦрд╛ рдЧрдпрд╛ рдХрд┐ рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ RecyclerView
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЧрд▓рддрд┐рдпрд╛рдБ рдХрд░рддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА Google рдиреЗ рдЗрд╕реЗ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рд╣реЛред
рдпрд╣рд╛рдВ рд╡рд░реНрдгрд┐рдд рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ Google рджреЗрд╡реЛрдВ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдФрд░ рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЗрд╕ рд╡реАрдбрд┐рдпреЛ рдХреЗ рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛, рдФрд░ рдЖрдкрдХреЛ рдЗрд╕реЗ рдЕрднреА рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕рдХреА рд╕рдВрдкреВрд░реНрдгрддрд╛ рдореЗрдВ рджреЗрдЦрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред
1. setHasFixedize рд╡рд┐рд╢реЗрд╖рддрд╛
recyclerView.setHasFixedSize(true)
рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗрдЯ рдХрд░реЗрдВ рдЬрдм recyclerView
рдЕрдкрдиреЗ рдмрдЪреНрдЪреЛрдВ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЖрдХрд╛рд░ рджреЗрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, recyclerView
рдХреЛ рд╕реВрдЪреА рдЖрдЗрдЯрдо рдореЗрдВ рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рд╣реЛрдиреЗ рдкрд░ рд╣рд░ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдпрд╣ рдЖрдЗрдЯрдо рд╕реНрд╡рдпрдВ redrawn рд╣реИред
2. рд╢реНрд░реЛрддрд╛ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
рдХреНрд▓рд┐рдХ рд╣реИрдВрдбрд▓рд░ рдХреЛ onCreateViewHolder(...)
рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВред
рдЬрдм рднреА рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рд╕реВрдЪреА рдЖрдЗрдЯрдо рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ, рддреЛ viewHolder
рдПрдбреЗрдкреНрдЯрд░ рд╕реНрдерд┐рддрд┐ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рдХреНрд▓рд┐рдХ рд╣реБрдЖ ( vh.getAdapterPosition()
)ред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рддрддреНрд╡реЛрдВ рдХреЛ рдПрдбреЗрдкреНрдЯрд░ рдХреЗ рдЕрдВрджрд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд view
рдШрдЯрдХреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛ред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЬрдм рддрдХ view
рдШрдЯрдХ рдмрди рдЬрд╛рддрд╛ рд╣реИ, рддрдм рддрдХ рдирд┐рдореНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: рд╕реВрдЪреА рдЖрдЗрдЯрдо, рд╕реНрдерд┐рддрд┐ 2 рдкрд░, рдХрд╣реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ, рддреЛ рддрддреНрд╡ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдерд┐рддрд┐ 5 рдкрд░ рд╣реЛрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, vh.getAdapterPosition()
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ vh.getAdapterPosition()
рд╕рд╣реА рд╕реВрдЪреА рд╕реВрдЪрдХрд╛рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИред
3. рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рджреГрд╢реНрдп рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдпрджрд┐ рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ view
рдШрдЯрдХреЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, R.layout.view_one
) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╕реАрдзреЗ layout
рд▓реМрдЯреЗрдВред
рдпрджрд┐ рдЖрдкрдХрд╛ рдПрдбрд╛рдкреНрдЯрд░ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ view
рдШрдЯрдХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рддреЛ getItemViewType
рдФрд░ getItemViewType
onCreateViewHolder
рдиреАрдЪреЗ рджреА рдЧрдИ рдЫрд╡рд┐ рдХреА рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреАред рдЖрдкрдХреЛ рдЗрд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ view
рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП onCreateViewHolder
рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рдПрдХ switch
рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред

рд▓реЗрдХрд┐рди рдЗрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк layout
рддреБрд░рдВрдд рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ onCreateViewHolder
рдореЗрдВ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рд╕реЗ рдмрдЪрд╛рдПрдЧрд╛:

рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рд▓рдЧрд╛рддрд╛рд░ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рд╡рд┐рднрд┐рдиреНрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдЪрдпрдирд┐рдд layout
рдЕрдВрджрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рддрд░реНрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рдЖрдкрдХрд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рд▓реМрдЯрд╛ рд╣реБрдЖ layout
рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ view
рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИред
4. рдбрд┐рдлреНрдпреВрдЯрд┐рд▓
RecyclerView
рдирдпрд╛ рдбреЗрдЯрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП DiffUtil
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдЬрдм рднреА recyclerView
рдореЗрдВ рдбреЗрдЯрд╛ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдбреЗрд╡рд▓рдкрд░ UI рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП notifyDataSetChanged()
рд╡рд┐рдзрд┐ рдХрд╣рддреЗ рд╣реИрдВред рд╡реЗ рдмрд╕ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рд╕рдВрд╕рд╛рдзрди-рдЧрд╣рди рд╣реИ, рдФрд░ рдпрд╣реА рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ DiffUtil
рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред
DiffUtil
рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рджреЛ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЛ рдЕрджреНрдпрддрди рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рддрдм рдкрд╣рд▓реА рд╕реВрдЪреА рдХреЛ рджреВрд╕рд░реА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ recyclerView
рдПрдбреЗрдкреНрдЯрд░ рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред DiffUtil
рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ DiffUtil
рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ DiffUtil
рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХрдИ рдЖрд╡рд╢реНрдпрдХ рддрд░реАрдХреЗ рд╣реИрдВ:

DiffUtil
рдХрд╛ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдлрд╛рдпрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ RecyclerView
рдЖрдк рдкреВрд░реА рд╕реВрдЪреА рдХреЛ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп TextView
рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрддреНрд╡ рдХреЗ рдЯреЗрдХреНрд╕реНрдЯ DiffUtil
рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ DiffUtil.Callback
рдореЗрдВ DiffUtil.Callback
рдкрджреНрдзрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓реЗрдЦ рд╣реИ ред
рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо RecyclerView
рдХрд╛ рдЕрдЪреНрдЫрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдпреБрдХреНрддрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗред
тЖТ RecyclerView рдХреЗ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЯрд┐рдкреНрд╕ред рднрд╛рдЧ реи