рдЕрдзрд┐рдХрддрдо рдЧрддрд┐ рдкрд░ RecyclerView: рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛


рдЗрд▓реНрдпрд╛ рдиреЗрдХреНрд░рд╛рд╕реЛрд╡ , рдорд╣рд╛рд▓рд┐рдЯреЗрдЯ , KODE рдХреЗ рдПрдВрдбреНрд░реЙрдЗрдб-рдбреЗрд╡рд▓рдкрд░
Android рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдврд╛рдИ рд╕рд╛рд▓ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛: рдореЛрдЯрд░ рдЪрд╛рд▓рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ рдПрдХ рд▓рд╛рддрд╡рд┐рдпрд╛рдИ рдмреИрдВрдХ рд╕реЗ рд▓реЗрдХрд░ рд╕рдВрдШреАрдп рдмреЛрдирд╕ рдкреНрд░рдгрд╛рд▓реА рдФрд░ рдкрд░рд┐рд╡рд╣рди рдХреЗ рд▓рд┐рдП рддреАрд╕рд░реА рдПрдпрд░рд▓рд╛рдЗрдиред рд╡реИрд╕реЗ рднреА, рдЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ, рдореБрдЭреЗ рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛, рдЬрд┐рдиреНрд╣реЗрдВ рд░рд┐рд╕рд╛рдЗрдХреНрд▓рд░рд╡реНрдпреВ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп рдЧреИрд░-рд╢рд╛рд╕реНрддреНрд░реАрдп рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рдЦреЛрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред
рдпрд╣ рд▓реЗрдЦ - DevFest Kaliningrad'18 рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдХреА рддреИрдпрд╛рд░реА рдХрд╛ рдлрд▓ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдирд╛ - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╢реБрд░реБрдЖрдд рдбреЗрд╡рд▓рдкрд░реНрд╕ рдФрд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдореМрдЬреВрджрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред


рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рд╛рд░ рдФрд░ рджрд░реНрдж рдХреЗ рд╕реНрд░реЛрдд рдореЗрдВ рдереЛрдбрд╝рд╛ рдЦреЛрджрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН, рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рд╕реВрдЪрд┐рдпреЛрдВ рдХреА рдЬрдЯрд┐рд▓рддрд╛ред


рдЕрдзреНрдпрд╛рдп рдПрдХ, рдЬрд┐рд╕рдореЗрдВ рдЧреНрд░рд╛рд╣рдХ рдПрдХ рдЖрд╡реЗрджрди рдХреЗ рд╕рдкрдиреЗ рджреЗрдЦрддрд╛ рд╣реИ, рдФрд░ рд╣рдо - рд╕реНрдкрд╖реНрдЯ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


рдЖрдЗрдП рдПрдХ рд╕реНрдерд┐рддрд┐ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдЬрдм рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдПрдХ рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд░рдмрдбрд╝ рдмрддрдЦ рдХреА рджреБрдХрд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд╛рд╣рддрд╛ рд╣реИред


рдкрд░рд┐рдпреЛрдЬрдирд╛ рддреЗрдЬреА рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣реА рд╣реИ, рдирдП рд╡рд┐рдЪрд╛рд░ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рд░реЛрдбрдореИрдк рдореЗрдВ рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЧреНрд░рд╛рд╣рдХ рд╣рдореЗрдВ рдореМрдЬреВрджрд╛ рд╕рд╛рдорд╛рдиреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ рдФрд░ рдЬрдм рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдбрд┐рд▓реАрд╡рд░реА рдЕрдиреБрд░реЛрдз рднрд░реЗрдВред рдЖрдкрдХреЛ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рджреВрд░ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдкрдбрд╝реЗрдЧрд╛: рд╣рдо RecyclerView рдХреЗ рдХреНрд▓рд╛рд╕рд┐рдХ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рдПрдбрд╛рдкреНрдЯрд░ рд╣реИ рдФрд░ рдЧрддрд┐рд╡рд┐рдзрд┐ ред


рдПрдбреЙрдкреНрдЯрд░ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рдЬрд╛рддреАрдп рдбреЗрдЯрд╛, рдПрдХ рд╡реНрдпреВрд╣реЙрд▓реНрдбрд░ рдФрд░ рд╕рд░рд▓ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд▓реЙрдЬрд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред


рдмрддрдЦ рдХреЗ рд╕рд╛рде рдПрдбрд╛рдкреНрдЯрд░
class DucksClassicAdapter( private val data: List<Duck>, private val onDuckClickAction: (Duck) -> Unit ) : RecyclerView.Adapter<DucksClassicAdapter.ViewHolder>() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val rubberDuckView = LayoutInflater.from(parent.context).inflate(R.layout.item_rubber_duck, parent, false) return ViewHolder(rubberDuckView) } override fun onBindViewHolder(holder: ViewHolder, position: Int) { val duck = data[position] holder.divider.isVisible = position != 0 holder.rubberDuckImage.apply { Picasso.get() .load(duck.icon) .config(Bitmap.Config.ARGB_4444) .fit() .centerCrop() .noFade() .placeholder(R.drawable.duck_stub) .into(this) } holder.clicksHolder.setOnClickListener { onDuckClickAction.invoke(duck) } } override fun getItemCount() = data.count() class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { val rubberDuckImage: ImageView = view.findViewById(R.id.rubberDuckImage) val clicksHolder: View = view.findViewById(R.id.clicksHolder) val divider: View = view.findViewById(R.id.divider) } } 



рд╕рдордп рдХреЗ рд╕рд╛рде, рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдкрд╛рд╕ рд░рдмрдбрд╝ рдмрддрдЦ рдХреЗ рд╕рд╛рдорд╛рдиреЛрдВ рдХреА рдПрдХ рдФрд░ рд╢реНрд░реЗрдгреА рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЙрд╕реЗ рдПрдХ рдирдпрд╛ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдФрд░ рдПрдХ рдирдпрд╛ рд▓реЗрдЖрдЙрдЯ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рдПрдбреЗрдкреНрдЯрд░ рдореЗрдВ рдПрдХ рдФрд░ ViewType рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реВрдЪреА рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ ViewHolder рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред


рдЙрд╕рдХреЗ рдмрд╛рдж, рд╢реАрд░реНрд╖рдХреЛрдВ рдХреЛ рдЙрди рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕реНрдЯреЛрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЙрдиреНрдореБрдЦреАрдХрд░рдг рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рд╢реНрд░реЗрдгреА рдХреЛ рдврд╣рд╛рдпрд╛ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдкреНрд▓рд╕ рд╣реЗрдбрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ ViewType рдФрд░ ViewHolder рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рдПрдбреЙрдкреНрдЯрд░ рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рд╣реЗрдбрд░ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдЗрд╕ рдпрд╛ рдЙрд╕ рддрддреНрд╡ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдФрд░ рджрд┐рдЦрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрд▓реЗ рд╕рдореВрд╣реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд░рдЦрдиреЗ рдФрд░ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


рд╣рд░ рдЪреАрдЬ рдХреЗ рд╕рд╛рде рдПрдбреЙрдкреНрдЯрд░
 class DucksClassicAdapter( private val onDuckClickAction: (Pair<Duck, Int>) -> Unit, private val onSlipperClickAction: (Duck) -> Unit, private val onAdvertClickAction: (Advert) -> Unit ) : RecyclerView.Adapter<RecyclerView.ViewHolder>() { var data: List<Duck> = emptyList() set(value) { field = value internalData = data.groupBy { it.javaClass.kotlin } .flatMap { groupedDucks -> val titleRes = when (groupedDucks.key) { DuckSlipper::class -> R.string.slippers RubberDuck::class -> R.string.rubber_ducks else -> R.string.mixed_ducks } groupedDucks.value.let { listOf(FakeDuck(titleRes, it)).plus(it) } } .toMutableList() duckCountsAdapters = internalData.map { duck -> val rubberDuck = (duck as? RubberDuck) DucksCountAdapter( data = (1..(rubberDuck?.count ?: 1)).map { count -> duck to count }, onCountClickAction = { onDuckClickAction.invoke(it) } ) } } private val advert = DuckMockData.adverts.orEmpty().shuffled().first() private var internalData: MutableList<Duck> = mutableListOf() private var duckCountsAdapters: List<DucksCountAdapter> = emptyList() private var collapsedHeaders: MutableSet<Duck> = hashSetOf() override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return when (viewType) { VIEW_TYPE_RUBBER_DUCK -> { val view = parent.context.inflate(R.layout.item_rubber_duck, parent) DuckViewHolder(view) } VIEW_TYPE_SLIPPER_DUCK -> { val view = parent.context.inflate(R.layout.item_duck_slipper, parent) SlipperViewHolder(view) } VIEW_TYPE_HEADER -> { val view = parent.context.inflate(R.layout.item_header, parent) HeaderViewHolder(view) } VIEW_TYPE_ADVERT -> { val view = parent.context.inflate(R.layout.item_advert, parent) AdvertViewHolder(view) } else -> throw UnsupportedOperationException("view type $viewType without ViewHolder") } } override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { when (holder) { is HeaderViewHolder -> bindHeaderViewHolder(holder, position) is DuckViewHolder -> bindDuckViewHolder(holder, position) is SlipperViewHolder -> bindSlipperViewHolder(holder, position) is AdvertViewHolder -> bindAdvertViewHolder(holder) } } private fun bindAdvertViewHolder(holder: AdvertViewHolder) { holder.advertImage.showIcon(advert.icon) holder.advertTagline.text = advert.tagline holder.itemView.setOnClickListener { onAdvertClickAction.invoke(advert) } } private fun bindHeaderViewHolder(holder: HeaderViewHolder, position: Int) { val item = getItem(position) as FakeDuck holder.clicksHolder.setOnClickListener { changeCollapseState(item, position) } val arrowRes = if (collapsedHeaders.contains(item)) R.drawable.ic_keyboard_arrow_up_black_24dp else R.drawable.ic_keyboard_arrow_down_black_24dp holder.arrow.setImageResource(arrowRes) holder.title.setText(item.titleRes) } private fun changeCollapseState(item: FakeDuck, position: Int) { val isCollapsed = collapsedHeaders.contains(item) if (isCollapsed) { collapsedHeaders.remove(item) } else { collapsedHeaders.add(item) } // 1 to add items after header val startPosition = position + 1 if (isCollapsed) { internalData.addAll(startPosition - ADVERTS_COUNT, item.items) notifyItemRangeInserted(startPosition, item.items.count()) } else { internalData.removeAll(item.items) notifyItemRangeRemoved(startPosition, item.items.count()) } notifyItemChanged(position) } @SuppressLint("SetTextI18n") private fun bindSlipperViewHolder(holder: SlipperViewHolder, position: Int) { val slipper = getItem(position) as DuckSlipper holder.duckSlipperImage.showIcon(slipper.icon) holder.duckSlipperSize.text = ": ${slipper.size}" holder.clicksHolder.setOnClickListener { onSlipperClickAction.invoke(slipper) } } private fun bindDuckViewHolder(holder: DuckViewHolder, position: Int) { val duck = getItem(position) as RubberDuck holder.rubberDuckImage.showIcon(duck.icon) holder.rubberDuckCounts.adapter = duckCountsAdapters[position - ADVERTS_COUNT] val context = holder.itemView.context holder.rubberDuckCounts.layoutManager = LinearLayoutManager(context, HORIZONTAL, false) } override fun getItemViewType(position: Int): Int { if (position == 0) return VIEW_TYPE_ADVERT return when (getItem(position)) { is FakeDuck -> VIEW_TYPE_HEADER is RubberDuck -> VIEW_TYPE_RUBBER_DUCK is DuckSlipper -> VIEW_TYPE_SLIPPER_DUCK else -> throw UnsupportedOperationException("unknown type for $position position") } } private fun getItem(position: Int) = internalData[position - ADVERTS_COUNT] override fun getItemCount() = internalData.count() + ADVERTS_COUNT class DuckViewHolder(view: View) : RecyclerView.ViewHolder(view) { val rubberDuckImage: ImageView = view.findViewById(R.id.rubberDuckImage) val rubberDuckCounts: RecyclerView = view.findViewById(R.id.rubberDuckCounts) } class SlipperViewHolder(view: View) : RecyclerView.ViewHolder(view) { val duckSlipperImage: ImageView = view.findViewById(R.id.duckSlipperImage) val duckSlipperSize: TextView = view.findViewById(R.id.duckSlipperSize) val clicksHolder: View = view.findViewById(R.id.clicksHolder) } class HeaderViewHolder(view: View) : RecyclerView.ViewHolder(view) { val title: TextView = view.findViewById(R.id.headerTitle) val arrow: ImageView = view.findViewById(R.id.headerArrow) val clicksHolder: View = view.findViewById(R.id.clicksHolder) } class AdvertViewHolder(view: View) : RecyclerView.ViewHolder(view) { val advertTagline: TextView = view.findViewById(R.id.advertTagline) val advertImage: ImageView = view.findViewById(R.id.advertImage) } } private class FakeDuck( val titleRes: Int, val items: List<Duck> ) : Duck private fun ImageView.showIcon(icon: String, placeHolderRes: Int = R.drawable.duck_stub) { Picasso.get() .load(icon) .config(Bitmap.Config.ARGB_4444) .fit() .centerCrop() .noFade() .placeholder(placeHolderRes) .into(this) } private class DucksCountAdapter( private val data: List<Pair<Duck, Int>>, private val onCountClickAction: (Pair<Duck, Int>) -> Unit ) : RecyclerView.Adapter<RecyclerView.ViewHolder>() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { val view = parent.context.inflate(R.layout.item_duck_count, parent) return CountViewHolder(view) } override fun getItemCount() = data.count() override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { (holder as CountViewHolder).count.apply { val item = data[position] text = item.second.toString() setOnClickListener { onCountClickAction.invoke(item) } } } class CountViewHolder(view: View) : RecyclerView.ViewHolder(view) { val count: TextView = view.findViewById(R.id.count) } } 

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдмрд┐рдВрджреБ рдХреЛ рдкрдХрдбрд╝рддреЗ рд╣реИрдВ - рдЗрд╕ рддрд░рд╣ рдХрд╛ рдереЛрдбрд╝рд╛ рд╕рд╛ рдПрдХ рд╕реНрд╡рд╕реНрде рд╡рд┐рдХрд╛рд╕ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рдФрд░ рдЖрдЧреЗ рдЧреНрд░рд╛рд╣рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдирдИ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╣реИрдВ: рд╕реВрдЪреА рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдмреИрдирд░ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдСрд░реНрдбрд░ рдХрд┐рдП рдЧрдП рдмрддрдЦ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЪреБрдирдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдХреЗрд╡рд▓ рдпреЗ рдХрд╛рд░реНрдп рдЕрдВрддрддрдГ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдПрдбреЗрдкреНрдЯрд░ рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдВрдЧреЗ, рдЬрд┐рд╕реЗ рдлрд┐рд░ рд╕реЗ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред


рдЬреАрдердм рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдореЗрдВ рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рдПрдбреЗрдкреНрдЯрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛

рдкрд░рд┐рдгрд╛рдо


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рддрд╕реНрд╡реАрд░ рдмрд┐рд▓реНрдХреБрд▓ рдЙрддреНрд╕рд╛рд╣рдЬрдирдХ рдирд╣реАрдВ рд╣реИ: рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рдПрдбреЗрдкреНрдЯрд░ рдХреЛ рддреЗрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдо рд╕рднреА рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рджрд░реНрдЬрдиреЛрдВ рдпрд╛ рд╕реИрдХрдбрд╝реЛрдВ рдРрд╕реА рд╕реВрдЪреА рд╕реНрдХреНрд░реАрди рд╣реИрдВред рдФрд░ рдЙрдирдХреЗ рдкрд╛рд╕ рдмрддрдЦ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдбреЗрдЯрд╛ рд╣реИред рд╣рд╛рдВ, рдФрд░ рдЙрдирдХрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред


рд╣рдорд╛рд░реЗ рдПрдбрд╛рдкреНрдЯрд░реЛрдВ рдореЗрдВ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ?


  • рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЙрдирдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ;
  • рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХреЗ рдЕрдВрджрд░ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╕рдордп рдХреЗ рд╕рд╛рде рдпрд╣ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ;
  • рдмрдирд╛рдП рд░рдЦрдиреЗ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдореБрд╢реНрдХрд┐рд▓;
  • рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╕рдордп рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдЙрдЪреНрдЪ рдЬреЛрдЦрд┐рдо;
  • рдЧреИрд░ рд╕реНрдкрд╖реНрдЯ рдбрд┐рдЬрд╛рдЗрдиред

рдЕрдзреНрдпрд╛рдп рджреЛ, рдЬрд┐рд╕рдореЗрдВ рд╕рдм рдХреБрдЫ рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ


рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрд╖реЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдЕрд╡рд╛рд╕реНрддрд╡рд┐рдХ рдФрд░ рд╕рдВрд╡реЗрджрдирд╣реАрди рд╣реИред рдкрд┐рдЫрд▓реЗ рдЕрдзреНрдпрд╛рдп рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдирд░реНрддрдХреА рдХреЗ рд╕рд╛рде рдРрд╕реЗ рджрд░реНрдЬрдиреЛрдВ рдиреГрддреНрдп рдХрд░рдиреЗ рдФрд░ рджрд░реНрдЬрдиреЛрдВ рдПрдбреЗрдкреНрдЯрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдХрд┐рд╕реА рдХреЛ рднреА рдПрдХ рд╕рд╡рд╛рд▓ рд╣реЛрдЧрд╛ "рд╢рд╛рдпрдж рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рди рд╣реИрдВ?"ред



рдЧрд┐рддреБрдм рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдкрд╣рд▓рд╛ рдПрдбреЗрдкреНрдЯрд░рдбреЗрд▓реЗрдЧреЗрдЯреНрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп 2015 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдФрд░ рдПрдХ рд╕рд╛рд▓ рдмрд╛рдж рдЧреНрд░реБрдкреА рдФрд░ рдПрдкреЙрдХреНрд╕реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд╢рд╕реНрддреНрд░рд╛рдЧрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ - рд╡реЗ рд╕рднреА рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рдХреА рдЕрдкрдиреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдФрд░ рдиреБрдХрд╕рд╛рди рд╣реИрдВред


рдХрдИ рдФрд░ рд╕рдорд╛рди рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╛рд╕реНрдЯ рдПрдбреЗрдкреНрдЯрд░), рд▓реЗрдХрд┐рди рди рддреЛ рдореИрдВрдиреЗ рдФрд░ рди рд╣реА рдореЗрд░реЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдиреЗ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрдиреНрд╣реЗрдВ рд▓реЗрдЦ рдореЗрдВ рдирд╣реАрдВ рдорд╛рдиреЗрдВрдЧреЗред

рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдбреЗрдкреНрдЯрд░рдбреЗрд▓реАрдЧреЗрдЯреНрд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рд╢рд░реНрдд рдкрд░ рдСрдирд▓рд╛рдЗрди рд╕реНрдЯреЛрд░ рдХреЗ рд╕рд╛рде рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдорд╛рдорд▓реЗ рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ - рдЕрд╕рдВрддреБрд╖реНрдЯ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ, рдпрд╣ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╕рдм рдХреБрдЫ рдореЗрдВ рдЙрдиреНрдирдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рд╣рд╛рде рд╕реЗ рдмрд╣реБрдд рд╕реА рдЪреАрдЬреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛)ред


рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдбрд╛рдкреНрдЯрд░ рд╕реЗ рдирд╣реАрдВ рдмрдЪрд╛рдПрдЧреА, рд▓реЗрдХрд┐рди рдпрд╣ рдмреНрд▓реЙрдХреЛрдВ (рдИрдВрдЯреЛрдВ) рд╕реЗ рдмрдиреЗрдЧреА, рдЬрд┐рд╕реЗ рд╣рдо рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╕реВрдЪреА рд╕реЗ рдЬреЛрдбрд╝ рдпрд╛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡реИрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдПрдбреЙрдкреНрдЯрд░ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░реЗрдВ
 class DucksDelegatesAdapter : ListDelegationAdapter<List<DisplayableItem>>() { init { delegatesManager.addDelegate(RubberDuckDelegate()) } fun setData(items: List<DisplayableItem>) { this.items = items notifyDataSetChanged() } } private class RubberDuckDelegate : AbsListItemAdapterDelegate<RubberDuckItem, DisplayableItem, RubberDuckDelegate.ViewHolder>() { override fun isForViewType(item: DisplayableItem, items: List<DisplayableItem>, position: Int): Boolean { return item is RubberDuckItem } override fun onCreateViewHolder(parent: ViewGroup): ViewHolder { val item = parent.context.inflate(R.layout.item_rubber_duck, parent, false) return ViewHolder(item) } override fun onBindViewHolder(item: RubberDuckItem, viewHolder: ViewHolder, payloads: List<Any>) { viewHolder.apply { rubberDuckImage.showIcon(item.icon) } } class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { val rubberDuckImage: ImageView = itemView.findViewById(R.id.rubberDuckImage) } } 

рдПрдХ рдЧрддрд┐рд╡рд┐рдзрд┐ рдПрдбрд╛рдкреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
 class DucksDelegatesActivity : AppCompatActivity() { private lateinit var ducksList: RecyclerView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_ducks_delegates) ducksList = findViewById(R.id.duckList) ducksList.apply { layoutManager = LinearLayoutManager(this@DucksDelegatesActivity) adapter = createAdapter().apply { showData() } } } fun createAdapter(): DucksDelegatesAdapter { return DucksDelegatesAdapter() } private fun DucksDelegatesAdapter.showData() { setData(getRubberDucks()) } private fun getRubberDucks(): List<DisplayableItem> { return DuckMockData.ducks.orEmpty().map { RubberDuckItem(it.icon) } } } 

рдкрд╣рд▓реЗ рдХрд╛рд░реНрдп рд╕реЗ, рд╣рдо рдЕрдВрддрд░ рджреЗрдЦрддреЗ рд╣реИрдВ: рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдПрдбреЗрдкреНрдЯрд░ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ - рд╡рд╣реА рдИрдВрдЯ, рдЬрд┐рд╕реЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╣рдореЗрдВ рдЙрд╕ рддрд░реНрдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рднреА рдорд┐рд▓рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдЕрдЧрд▓рд╛ рд╣рдо рдкреНрд░рдмрдВрдзрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ - рдпрд╣ рднреА рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд░реНрдЧ рд╣реИред рдФрд░ рдЖрдЦрд┐рд░реА рдЪреАрдЬ рдЬреЛ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рд╣реИ рдПрдХ рдПрдбреЗрдкреНрдЯрд░ рдмрдирд╛рдирд╛ рдФрд░ рдЙрд╕реЗ рдбреЗрдЯрд╛ рд╕реЗ рднрд░рдирд╛


рд╕реНрдЯреЛрд░ рдФрд░ рд╣реЗрдбрд░ рдХреА рджреВрд╕рд░реА рд╢реНрд░реЗрдгреА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд▓рд┐рдЦреЗрдВрдЧреЗ, рдФрд░ рдПрдиреАрдореЗрд╢рди рдбрд┐рдлреНрдпреВрдЯрд┐рд▓ рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред


рдпрд╣рд╛рдВ рдореИрдВ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рдирд┐рд╖реНрдХрд░реНрд╖ рдХрд╛ рд╕рдВрдХреЗрдд рджреВрдВрдЧрд╛: рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рд╕рднреА рд╕реВрдЪреАрдмрджреНрдз рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдСрдирд▓рд╛рдЗрди рд╕реНрдЯреЛрд░ рдХреЗ рд╕рд╛рде рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрд╡реЗрджрди рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд┐рдирд╛ minuses рдХреЗ, рдХрд╣реАрдВ рдФрд░ред


рдЕрдбреИрдкреНрдЯрд░ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдкреНрд░реЛрд╕реЗрд╕ рд╡рд┐рде рдЕрдбреЗрдкреНрдЯрд░рдбреЗрд▓рдЧреЗрдЯреНрд╕ рдЗрди рдЬрд┐рдердм рд╣рд┐рд╕реНрдЯреНрд░реА

рдЕрдзреНрдпрд╛рдп рддреАрди, рдЬрд┐рд╕рдореЗрдВ рдбреЗрд╡рд▓рдкрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдХреЗ рдЧреБрд▓рд╛рдмреА рдЪрд╢реНрдорд╛ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ


рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдФрд░ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдбреБрдмрдХреА рд▓рдЧрд╛рдПрдВрдЧреЗред рдПрдХ рддрд░рд╣ рд╕реЗ рдпрд╛ рджреВрд╕рд░реЗ рдореИрдВрдиреЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рд╕рднреА рддреАрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдЖрд╡реЗрджрди рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред


AdapterDelegates


рд╣рдо рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдмрд╕реЗ рдмрдбрд╝реА рд░реВрд╕реА рдПрдпрд░рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдПрдХ рд╕рд░рд▓ рднреБрдЧрддрд╛рди рд╕реВрдЪреА рдХреЛ рд╕рдореВрд╣реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реВрдЪреА рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред


рдПрдХ рд╕рд░рд▓реАрдХреГрдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛рд░реНрдп рдпреЛрдЬрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:


рдореБрдЦреНрдп рд╡рд░реНрдЧ рдбреЗрд▓реАрдЧреЗрдЯ рдПрдбреЗрдкреНрдЯрд░ рд╣реИ , рд╡рд┐рднрд┐рдиреНрди "рдИрдВрдЯреЗрдВ" "рдкреНрд░рддрд┐рдирд┐рдзрд┐" рд╣реИрдВ рдЬреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВ рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╕реВрдЪреА рдореЗрдВ рд╣реАред


рдкреЗрд╢реЗрд╡рд░реЛрдВ:


  • рд╡рд┐рд╕рд░реНрдЬрди рдХреА рд╕рд╛рджрдЧреА;
  • рдПрдбреЗрдкреНрдЯрд░ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди;
  • рдХреБрдЫ рддрд░реАрдХреЗ рдФрд░ рдХрдХреНрд╖рд╛рдПрдВ;
  • рдХреЛрдИ рдкреНрд░рддрд┐рдмрд┐рдВрдм, рдХреЛрдб рдкреАрдврд╝реА рдФрд░ рдбреЗрдЯрд╛рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдирд╣реАрдВред

рд╡рд┐рдкрдХреНрд╖:


  • рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рддрд░реНрдХ рдХреЛ рд╕реНрд╡рдпрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдбрд┐рдлреНрдпреВрдЯреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрджреНрдпрддрди рдЖрдЗрдЯрдо l (рд╕рдВрд╕реНрдХрд░рдг 3.1.0 рдХреЗ рдмрд╛рдж рд╕реЗ, рдЖрдк AsyncListDifferDelegationAdapter рдЕрдбреИрдкреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ);
  • рдирд┐рд░рд░реНрдердХ рдХреЛрдбред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рднреА рдореБрдЦреНрдп рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рддреА рд╣реИ рдФрд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдкрд╣рд▓реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЗрд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕рд▓рд╛рд╣ рдирд╣реАрдВ рджреЗрддрд╛ред

рдЧреБрдЯ


рд╣рдо рдЕрдХреНрд╕рд░ рдЧреНрд░реБрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд▓рд┐рд╕рд╛ рд░реЗ рджреНрд╡рд╛рд░рд╛ рдХрдИ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдмрдирд╛рдИ рдЧрдИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд▓рд╛рддрд╡рд┐рдпрд╛рдИ рдмреИрдВрдХ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рд▓рд┐рдЦрдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред


рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореБрдЦреНрдп рдПрдХ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



рд╣рдо рдПрдХ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рдХреЗрдиреНрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред


рдмрддрдЦреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдСрдирд▓рд╛рдЗрди рд╕реНрдЯреЛрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рд▓реЗрдЖрдЙрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдФрд░ рдХреЛрдЯрд▓рд┐рди рд╕рд┐рдВрдереЗрдЯрд┐рдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВред рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЬреЛ рдореБрдЭреЗ рдПрдбреЗрдкреНрдЯрд░рдбреЗрд▓рдЧреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрдирд╛ рдерд╛, рдпрд╣ рд╕рд┐рд░реНрдл рд╕реНрд╡рд░реНрдЧ рдФрд░ рдкреГрдереНрд╡реА рд╣реИред


рдЬреЛ рдХреБрдЫ рдмрдЪрддрд╛ рд╣реИ рд╡рд╣ RecyclerView GroupieAdapter рдХреЛ рдПрдХ рдПрдбреЗрдкреНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдореЙрдХ рдХрд┐рдП рдЧрдП рдЖрдЗрдЯрдо рдХреЛ рдбрд╛рд▓рдирд╛ рд╣реИред



рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдп рдпреЛрдЬрдирд╛ рдмрдбрд╝реА рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред рдпрд╣рд╛рдВ, рд╕рд╛рдзрд╛рд░рдг рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдкреВрд░реЗ рдЕрдиреБрднрд╛рдЧреЛрдВ - рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рдореВрд╣ рдФрд░ рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдкреЗрд╢реЗрд╡рд░реЛрдВ:


  • рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рдЕрдВрддрд░рдлрд▓рдХ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдкреАрдЖрдИ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ;
  • рдмреЙрдХреНрд╕рд┐рдВрдЧ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐;
  • рддрддреНрд╡реЛрдВ рдХреЗ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдЯреВрдЯ;
  • рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдХрд▓реНрдк, рдХреЛрдЯрд▓рд┐рди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдФрд░ рдбреЗрдЯрд╛рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рдмреАрдЪ рдЪрдпрди;
  • ItemDecoration рдФрд░ рдПрдирд┐рдореЗрд╢рди рдПрдореНрдмреЗрдб рдХрд░рдирд╛ред

рд╡рд┐рдкрдХреНрд╖:


  • рдЕрдзреВрд░рд╛ рд╡рд┐рдХрд┐;
  • рдЕрдиреБрдЪрд░ рдФрд░ рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ рдЦрд░рд╛рдм рд╕рдорд░реНрдерди;
  • рдЫреЛрдЯреЗ рдХреАрдбрд╝реЗ рдЬрд┐рдиреНрд╣реЗрдВ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рджрд░рдХрд┐рдирд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдерд╛;
  • рдореБрдЦреНрдп рдереНрд░реЗрдб рдореЗрдВ рдЕрдВрддрд░ (рдЕрднреА рдХреЗ рд▓рд┐рдП);
  • AndroidX рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИ (рдлрд┐рд▓рд╣рд╛рд▓, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред

рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЧреНрд░реБрдкреА , рдЕрдкрдиреА рд╕рднреА рдХрдорд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде, рдПрдбреЗрдкреНрдЯрд░рдбреЗрд▓рдЧреЗрдЯреНрд╕ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реНрддрд░ рдХреА рддрд╣ рд╕реВрдЪреА рдмрдирд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдирд╣реАрдВ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред


рдЧреНрд░реБрдкреА рдХреЗ рд╕рд╛рде рдбрдХ рд╕реВрдЪреА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛

epoxy


рдкрд┐рдЫрд▓реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреЛ рд╣рдордиреЗ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рдИрдкреЙрдХреНрд╕реА рд╣реИ , рдЬрд┐рд╕реЗ рдПрдпрд░рдмреАрдПрдирдмреА рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬрдЯрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред Airbnb рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕реНрд╡рдпрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд░реНрд╡рд░ рд╕реЗ рд╕реАрдзреЗ рд╕реНрдХреНрд░реАрди рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред рдПрдкреЙрдХреНрд╕реА рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдирд╡реАрдирддрдо рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдХрд╛рдо рдЖрдпрд╛ - рдпреЗрдХрд╛рддреЗрд░рд┐рдирдмрд░реНрдЧ рдореЗрдВ рдПрдХ рдмреИрдВрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡реЗрджрдиред


рд╕реНрдХреНрд░реАрди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕реВрдЪрд┐рдпрд╛рдВред рдФрд░ рд╕реНрдХреНрд░реАрди рдореЗрдВ рд╕реЗ рдПрдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдВрддрд╣реАрди рдерд╛ред рдФрд░ рдПрдкреЙрдХреНрд╕реА рдиреЗ рд╣рдореЗрдВ рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдореЗрдВ рдорджрдж рдХреАред


рдПрдХ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рджреЛ рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдПрдХ рдПрдбреЗрдкреНрдЯрд░ рдХреЗ рдмрдЬрд╛рдп, рдПрдкреЙрдХреНрд╕реАрдХрдВрдЯреНрд░реЛрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реВрдЪреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдПрдбрд╛рдкреНрдЯрд░ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред



рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛрдб рдкреАрдврд╝реА рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рд╕рднреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдпрд╣ рд╡рд┐рдХреА рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИ рдФрд░ рдирдореВрдиреЛрдВ рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИред


рдкреЗрд╢реЗрд╡рд░реЛрдВ:


  • рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓, рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдХреНрд░реАрди рд╕реЗ рдЙрддреНрдкрдиреНрди, рд╕рд░рд▓ рд╕реНрдХреНрд░реАрди рдореЗрдВ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде;
  • рд╕реНрдХреНрд░реАрди рдХрд╛ рдШреЛрд╖рдгрд╛рддреНрдордХ рд╡рд┐рд╡рд░рдг;
  • рдЕрдзрд┐рдХрддрдо рдЧрддрд┐ рдкрд░ рдбреЗрдЯрд╛рдмрд╛рдЗрдВрдбрд┐рдВрдЧ - рд╕реАрдзреЗ рд▓реЗрдЖрдЙрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдореЙрдбрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ;
  • рдмрд╕ рдмреНрд▓реЙрдХ рд╕реЗ рди рдХреЗрд╡рд▓ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЬрдЯрд┐рд▓ рд╕реНрдХреНрд░реАрди рднреА;
  • рдЧрддрд┐рд╡рд┐рдзрд┐ рдкрд░ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ ViewPool;
  • рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдВрддрд░ (AsyncEpoxyController);
  • рдХреНрд╖реИрддрд┐рдЬ рд╕реВрдЪрд┐рдпреЛрдВ рд╕реЗ рднрд╛рдк рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рд╡рд┐рдкрдХреНрд╖:


  • рд╡рд░реНрдЧреЛрдВ, рдкреНрд░реЛрд╕реЗрд╕рд░, рдПрдиреЛрдЯреЗрд╢рди рдХреА рдореЛрдЯреА рдЧреБрдЪреНрдЫрд╛;
  • рдЦрд░реЛрдВрдЪ рд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рдЧреЛрддрд╛;
  • рдореЙрдбреНрдпреВрд▓ рдореЗрдВ R2 рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдЯрд░рдХреЙрдЗрди рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ;
  • рдпрд╣ рд╕рдордЭрдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдХреЙрд▓рдмреИрдХ рдХреЗ рд╕рд╛рде рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдП (рд╣рдо рдЦреБрдж рдЕрднреА рддрдХ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛рдП рдереЗ);
  • рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрд╕реА рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдПрдХ рджреБрд░реНрдШрдЯрдирд╛ред

рдПрдкреЙрдХреНрд╕реА рдХреЗ рд╕рд╛рде рдбрдХ рд╕реВрдЪреА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛

рдкрд░рд┐рдгрд╛рдо


рдореБрдЦреНрдп рдмрд╛рдд рдЬреЛ рдореИрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд╡рд╣ рдереА: рдЙрд╕ рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдордд рд░рдЦреЛ рдЬреЛ рддрдм рдкреНрд░рдХрдЯ рд╣реЛрддреА рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдЬрдЯрд┐рд▓ рд╕реВрдЪрд┐рдпрд╛рдБ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рд▓рдЧрд╛рддрд╛рд░ рдЙрдиреНрд╣реЗрдВ рд▓рд╛рд▓ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдФрд░ рдРрд╕рд╛ рдмрд╣реБрдд рдмрд╛рд░ рд╣реЛрддрд╛ рд╣реИред рдФрд░ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЬрдм рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдЧрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрд╕ рд╢реБрд░реВ рд╣реЛ рд░рд╣реА рд╣реИ, рдпрд╛ рдЖрдк рдЗрд╕рдХреА рд░рд┐рдлреИрдХреНрдЯрд┐рдВрдЧ рдореЗрдВ рд▓рдЧреЗ рд╣реБрдП рд╣реИрдВред


рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рддрд░реНрдХ рдХреЛ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдЬрдЯрд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╕реЛрдЪрдХрд░ рдХрд┐ рд╣рдорд╛рд░реЗ рдЦреБрдж рдХреЗ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рд░ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдВрдЧреЗред рд╡реЗ рдХрд╛рдлреА рдХрдо рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рди рдХреЗрд╡рд▓ рдПрдХ рдЦреБрд╢реА рд╣реИ, рдмрд▓реНрдХрд┐ рддрд░реНрдХ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдпреВрдЖрдИ рднрд╛рдЧ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд▓реЛрднрди рднреА рд╣реИ, рдЬреЛ рдХрд┐ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕реЗ рдЙрдкрдХрд░рдг рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЛ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдХрдИ рдЕрдиреБрднрд╡реА (рдФрд░ рди рдХреЗрд╡рд▓) рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдпрд╣ рдпрд╛ рддреЛ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдпрд╛ рд╡реЗ рдореБрдЭрд╕реЗ рдЕрд╕рд╣рдордд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рдкрд░ рдлрд┐рд░ рд╕реЗ рдЬреЛрд░ рджреЗрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╛рдирддрд╛ рд╣реВрдВред

рддреЛ, рдХреНрдпрд╛ рдЪреБрдирдирд╛ рд╣реИ?


рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд░рд╣рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрдирд╛ рдХрд╛рдлреА рдХрдард┐рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЪреБрдирд╛рд╡ рдХрдИ рдХрд╛рд░рдХреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ: рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рд╕реЗ рд▓реЗрдХрд░ рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рддрдХред


рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░реВрдВрдЧрд╛:


  1. рдпрджрд┐ рдЖрдк рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЕрдкрдирд╛ рд░рд╛рд╕реНрддрд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ AdapterDelegates рдХреЗ рд╕рд╛рде рдПрдХ рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ - рдпрд╣ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ - рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЖрдк рд╕рдордЭреЗрдВрдЧреЗ рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕реНрд╡рдпрдВ рдПрдбреЗрдкреНрдЯрд░ рд▓рд┐рдЦрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХреНрдпреЛрдВ рд╣реИред
  2. рдЧреНрд░реБрдкреА рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдбреЗрдкреНрдЯрд░рдбреЗрд▓реАрдЧреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдкрд░реНрдпрд╛рдкреНрдд рдЦреЗрд▓ рдЪреБрдХреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдердХ рдЧрдП рд╣реИрдВ, рдпрд╛ рд╣рд░ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЬреЛ рддреБрд░рдВрдд рдПрдХ рдордзреНрдп рдореИрджрд╛рди рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдФрд░ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рддрд╣ рд╕рдореВрд╣реЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛ - рдпрд╣ рдЙрд╕рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реНрдХ рднреА рд╣реИред
  3. рдЦреИрд░, рдФрд░ рдПрдкреЙрдХреНрд╕реА - рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЬрдЯрд┐рд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдбреЗрдЯрд╛ рдХреА рдПрдХ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдХреЗ рд╕рд╛рде, рдЗрд╕рд▓рд┐рдП рд╡рд╕рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдЬрдЯрд┐рд▓рддрд╛ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдХрдо рд╣реЛрдЧреАред рдкрд╣рд▓реЗ рддреЛ рдпрд╣ рдХрдард┐рди рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реВрдЪрд┐рдпреЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рддрд┐рдкрд╣рд┐рдпрд╛ рдХреА рддрд░рд╣ рдкреНрд░рддреАрдд рд╣реЛрдЧрд╛ред рдПрдкреЙрдХреНрд╕реА рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддрд░реНрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдбреЗрдЯрд╛рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдФрд░ рдПрдорд╡реАрд╡реАрдПрдо рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ - рдпрд╣ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕реА рд▓реЗрдЖрдЙрдЯ рд╕реЗ рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдПред

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рдЖрдк рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХрд╛ рдХреЛрдб рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

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


All Articles