RecyclerView рдХреЗ рдкреЗрд╢реЗрд╡рд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рд╡ред рднрд╛рдЧ 1

RecyclerView рдХреЗ рдкреЗрд╢реЗрд╡рд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рд╡ред рднрд╛рдЧ 1


рдореИрдВрдиреЗ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рджреЗрдЦрд╛ рдЧрдпрд╛ рдХрд┐ рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ 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 рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред


рдорд╛рдирдХ getItemViewType рдФрд░ onCreateViewHolder


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


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 рдХреЗ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЯрд┐рдкреНрд╕ред рднрд╛рдЧ реи

Source: https://habr.com/ru/post/hi425945/


All Articles