RecyclerView рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрд╡рд▓рдкрд░.android.com рдХреНрдпрд╛ рдЪреБрдк рд╣реИ?

рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдХрд╛ рд╕рд╡рд╛рд▓ рдпрд╛ рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЯреБрдХрдбрд╝рд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдВрдбреНрд░реЙрдЗрдб (рдПрдВрдбреНрд░реЙрдЗрдб рдбреЗрд╡рд▓рдкрд░) рдХреЗ рд▓рд┐рдП рдмреЗрд╣рдж рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдХреНрдпреЛрдВ? рдХреНрдпреЛрдВрдХрд┐ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреА рд╕реНрдерд┐рддрд┐ ( onCreate () , onStart () , рдЗрддреНрдпрд╛рджрд┐) рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЗ рдХреЙрд▓рдмреИрдХ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдХреНрд░рдо рд╣рд╛рд░реНрдб-рдХреЛрдбрд┐рдд рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдЧрд▓рдд рдЖрд╡реЗрджрди рдХреЗ рдХрд╛рд░рдг рдЖрд╡реЗрджрди рдЕрдХреНрд╖рдорддрд╛ рд╣реЛ рдЬрд╛рдПрдЧреАред рдЬреАрд╡рди рдЪрдХреНрд░ рдХрд╛ рдЗрд╕рд╕реЗ рдХреНрдпрд╛ рд▓реЗрдирд╛-рджреЗрдирд╛ рд╣реИ? - рдЪреМрдХрд╕ рд╣реИрдмреНрд░реЗрдХреНрдЯ рдкреВрдЫреЗрдЧрд╛ред рд╕рдм рдХреЗ рдмрд╛рдж, рд╢реАрд░реНрд╖рдХ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ? рдореИрдВ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реВрдВ: рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдФрд░ рд░рд┐рд╕рд╛рдЗрдХреНрд▓рд░рд╡реНрдпреВ рдХреЗ рдХрд╛рдо рдХреЗ рдмреАрдЪ рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ - рдЗрд╕ рд╡рд┐рдЬреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХреЙрд▓рдмреИрдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдЖрджреЗрд╢ рд╣реИ , рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕реВрдЪрд┐рдпрд╛рдВ рдмрд╣реБрдд рд░рд╣рд╕реНрдпрдордп рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд╕рдХрддреА рд╣реИрдВред

RecyclerView рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдПрдбрд╛рдкреНрдЯрд░


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдПред рдорд╛рдирдХ рдиреНрдпреВрдирддрдо рдкреЗрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕реВрдЪреА рдПрдбрд╛рдкреНрдЯрд░ рд╣реИ:

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 1


public class RvCustomAdapter extends RecyclerView.Adapter<RvCustomAdapter.CustomViewHolder> { private final Frag1 frag; private final LayoutInflater lInflater; private ArrayList<JSONDataSet> dataSet; ... ... ... public RvCustomAdapter(final Frag1 fragment) { this.frag = fragment; this.lInflater = (LayoutInflater) fragment.getContext() .getSystemService(Context.LAYOUT_INFLATER_SERVICE); this.dataSet = new ArrayList<>(); } ... ... ... @Override public CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //    View view = lInflater.inflate(R.layout.recycler_view_data_item, parent, false); /** *      *  (size, margins, paddings  .) */ RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) view.getLayoutParams(); params.height = RecyclerView.LayoutParams.WRAP_CONTENT; view.setLayoutParams(params); return new CustomViewHolder(view); } //    view ( layout manager-) @Override public void onBindViewHolder(@NonNull CustomViewHolder holder, int position) { holder.showData(position); } @Override public int getItemCount() { return dataSet.size(); } /** *  view holder-      *     *        */ class CustomViewHolder extends RecyclerView.ViewHolder { ... ... ... @BindView(R.id.ll_Data) LinearLayout ll_Data; @BindView(R.id.cb_Data) CheckBox cb_Data; ... ... ... private JSONDataSet cur; CustomViewHolder(View itemView) { super(itemView); ButterKnife.bind(this, itemView); } /** * ,      *       . */ ... ... ... } 

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

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 2


  void showData(final int position) { cur = dataSet.get(position); cb_Data.setChecked(cur.isChecked()); ... ... ... cb_Data.setOnCheckedChangeListener(cb_DataOnCheckedChangeListener); ll_Data.setOnClickListener(ll_DataOnClickListener); } private OnClickListener ll_DataOnClickListener = new OnClickListener() { @Override public void onClick(View view) { cur.setChecked(!cur.isChecked()); cb_Data.setChecked(cur.isChecked()); } }; private OnCheckedChangeListener cb_DataOnCheckedChangeListener = new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { cur.setChecked(checked); compoundButton.setChecked(checked); setItemsColor(checked); if (checked) { if (...) { (frag).addSelectedItemsCounter(cur); } else { cur.setChecked(!checked); compoundButton.setChecked(!checked); setItemsColor(!checked); if (...) { createPrimaryDialog(); } else { createSecondaryDialog(); } } } else { (frag).remSelectedItemsCounter(cur); } } }; 

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

рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдирд┐рдХрд▓рддрд╛ рд╣реИ:


рдЕрдВрдЬреАрд░ рдореЗрдВ 1 - рдЙрддреНрдкрдиреНрди рд╕реВрдЪреАред рдЕрдВрдЬреАрд░ рдореЗрдВ -2 - рдЪрд┐рд╣реНрдирд┐рдд рд╕реВрдЪреА рдЖрдЗрдЯрдоред рдЕрдВрдЬреАрд░ -3 рдореЗрдВ - рдЕрдЧрд▓реЗ рддрддреНрд╡ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╕рдордп рд╕реНрдерд┐рддрд┐ рдХреЗ рдЙрд▓реНрд▓рдВрдШрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╕рдВрд╡рд╛рджред

рдЪрд┐рддреНрд░ -1 рд╕реВрдЪреА рд▓реЗрдЖрдЙрдЯ рдкреНрд░рдмрдВрдзрдХ ( LayoutManager ) рдХреЗ рд╕рд╛рде рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдирд┐рдореНрди рдХреНрд░рдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

рдПрд▓реНрдЧреЛрд░рд┐рдердо 1


  1. Rv_Adapter.getItemCount () - рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ;
  2. Rv_Adapter.onAttachedToRecyclerView () - рдПрдбрд╛рдкреНрдЯрд░ рд╡рд┐рдЬреЗрдЯ рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИ;
  3. рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕реВрдЪреА рд╕реНрдерд╛рди рд╕реВрдЪреА рддрддреНрд╡реЛрдВ рд╕реЗ рднрд░рд╛ рдирд╣реАрдВ рд╣реИ, рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо 2 рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд░рдг рдХрд┐рдП рдЧрдП рд╣реИрдВ:

рдПрд▓реНрдЧреЛрд░рд┐рдердо 2


  1. Rv_Adapter.onCreateViewHolder () - рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХрд╛ рдЕрдкрдирд╛ рд╣реИрдВрдбрд▓рд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ;
  2. CustomViewHolder () - рд╣реИрдВрдбрд▓рд░ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;
  3. Rv_Adapter.onBindViewHolder () - рдкреНрд░рддреНрдпреЗрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реНрдпреВ рдмрд┐рд▓реНрдбрд░ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;
  4. Rv_Adapter.onViewAttachedToWindow () - рдЙрддреНрдкрдиреНрди рджреГрд╢реНрдп рд╡рд┐рдВрдбреЛ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ;

рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ! рдпрджрд┐ "рд▓реЗрдХрд┐рди" рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рдмрд▓реНрдХрд┐, BUT!

рд╕рдорд╕реНрдпрд╛


рдХрдо рд╕реЗ рдХрдо рдПрдХ рджрд░реНрдЬрди рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд▓рдВрдмреА рд╕реВрдЪреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдХрд┐рд╕реА рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдЪрд┐рддреНрд░ -3 рд╕реЗ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред

рдЙрдкрд╛рдп


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

рдПрд▓реНрдЧреЛрд░рд┐рдердо 3


  1. рдЬрдм рд╣реИрдВрдбрд▓рд░ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕реВрдЪреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреА рджреГрд╢реНрдпрддрд╛ рдХреЛ рд╡рд┐рджреЗрд╢ рдореЗрдВ рдЫрд┐рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ Rv_Adapter.onViewDetachedFromWindow () рд╡рд┐рдзрд┐ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ , рдЬреЛ рдЦрд┐рдбрд╝рдХреА рд╕реЗ рдЫрд┐рдкрдиреЗ рд╡рд╛рд▓реЗ рджреГрд╢реНрдп рдХреЛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рддреА рд╣реИ;
  2. рдЬрдм рд╕реВрдЪреА рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдирдпрд╛ рддрддреНрд╡ ( рдЖрдЗрдЯрдо рджреГрд╢реНрдп ) рджреГрд╢реНрдпрддрд╛ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рддреЛ рд╕рдВрдмрджреНрдз рд╣реИрдВрдбрд▓рд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо 2 рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;

рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИред рдорд╛рд░реНрдХрдЕрдк рдореИрдиреЗрдЬрд░ рдХреА "рдбрд┐рдлрд╝реЙрд▓реНрдЯ" рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде, рд╡рд┐рдВрдбреЛ рд╕реЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рд╕реВрдЪреА рдЖрдЗрдЯрдо рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХреНрд╡рд┐рдХ рдПрдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП рдХрддрд╛рд░ рдореЗрдВ рдирд╣реАрдВ рд░рд╣рддрд╛ рд╣реИред рдЬреИрд╕реЗ рд╣реА рдЙрдирдореЗрдВ рд╕реЗ 2 рд╡рд╣рд╛рдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдкреНрд░рдмрдВрдзрдХ рджреНрд╡рд╛рд░рд╛ рдбрд┐рд╕реНрдкреЛрдЬрд╝ рдХрд┐рдП рдЧрдП рдЗрдВрд╕реНрдЯреЗрдВрд╕реЗрд╕ рдХреА рдХрддрд╛рд░ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рд╕реВрдЪреА рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП Rv_Adapter.onViewRecycled () рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред

рдЗрд╕рд▓рд┐рдП, рдПрд▓реНрдЧреЛрд░рд┐рдердо 3 рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рдПрд▓реНрдЧреЛрд░рд┐рдердо 3 '


 //   :  - true,  - false: bool direction; if(direction){ /** *          *      * (  directDetachedViews) */ Rv_Adapter.onViewDetachedFromWindow(holder); /** *        *   ,  max */ if(directDetachedViews.size() > max) { /** *       (holder) *      *      * (  directRecycleredHolders) */ Rv_Adapter.onViewRecycled(holder); } /** *     * (visiblePos)   ,  */ if(visiblePos < Rv_Adapter.getItemCount()) { /** *       *    (  reverseDetachedViews) *   (itemView),   *   (  visiblePos), */ if(reverseDetachedViews.content(itemView)){ /** *        *  (  reverseRecycleredHolders) *   holder,    *  ,  visiblePos,    */ Rv_Adapter.onCreateViewHolder(itemView) -> { holder = CustomViewHolder(itemView); }; } else { /** *  -       *   (reverseRecycleredHolders) */ holder = reverseRecycleredHolders.getHolder(visiblePos); } /** *        *   */ Rv_Adapter.onBindViewHolder(holder, visiblePos); } else { /** *  -      *     (reverseDetachedViews) */ holder = reverseDetachedViews.getHolder(visiblePos) } //     Rv_Adapter.onViewAttachedToWindow(holder); } else { ... ... ... ... ... } 


рдЙрдкрд░реЛрдХреНрдд рдПрд▓реНрдЧреЛрд░рд┐рдердо 3 'рд╕реЗ рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХрддрдо рд╕реЗ рдЕрдзрд┐рдХ рд╕реВрдЪреА рдореЗрдВ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдореЗрдВ рд╡реНрдпреВ рдкреЛрдЬреАрд╢рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдирдП рд╕рд┐рд░реЗ рд╕реЗ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреА, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП Rv_Adapter.onBindViewHolder (рдзрд╛рд░рдХ, рджреГрд╢реНрдпрдкреЛрд╕) рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдПрдЧрд╛ред

рдирд┐рд╖реНрдХрд░реНрд╖ рдФрд░ рд╕рд┐рдлрд╛рд░рд┐рд╢


рдЬрдм рд╕реВрдЪреА рдЕрдзрд┐рдХрддрдо рд╕реЗ рдЕрдзрд┐рдХ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рд╕реВрдЪреА рдХреЛ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддреЗ рд╕рдордп onBindViewHolder (рдзрд╛рд░рдХ, рджреГрд╢реНрдпрдорд╛рди) рд╡рд┐рдзрд┐ рдореЗрдВ рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрдЪрд╛рд▓рди рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП:

  1. рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╣реИрдВрдбрд▓рд░ рдХреА рдХрддрд╛рд░ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рджреГрд╢реНрдп рдХреЛ рднреАрдбрд╝ рдХреЗ рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣ рддрддреНрд╡реЛрдВ рдХреЛ рдкреВрд░рдХ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪрдВрдЧрд╛ рдкреБрдирд░реНрдирд╡реАрдиреАрдХрд░рдг ;
  2. рдЗрд╕ рджреГрд╢реНрдп рдХреЛ onViewRecycled (рдзрд╛рд░рдХ) рд╡рд┐рдзрд┐ рдореЗрдВ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдирд┐рд░реНрджреЗрд╢ рдбрд╛рд▓реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП .... setRecycled (true) ;
  3. OnBindViewHolder (рдзрд╛рд░рдХ, рджреГрд╢реНрдпрджрд░реНрд╢реА) рдХреЛ рдЗрд╕ рд╕рдВрдХреЗрдд рдХреА рдПрдХ рдЬрд╛рдВрдЪ рд╡рд┐рдзрд┐ рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрджрд┐ (рд╣реИрдВрдбрд▓рд░.cur.isRecycled ()) ...;
  4. рдЗрд╕ рд▓рдХреНрд╖рдг рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП onViewAttachedToWindow (рд╣реЛрд▓реНрдбрд░) рдореЗрдердб рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рдиреНрд╕ рдореЗрдВ рдбрд╛рд▓реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП .... setRecycled (false) ;

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП , рдЗрд╕ рддрд░рд╣:

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 3


  @Override public void onViewRecycled(@NonNull CustomViewHolder holder) { super.onViewRecycled(holder); holder.cur.setRecycled(true); } @Override public void onBindViewHolder(@NonNull CustomViewHolder holder, int position) { if (!holder.cur.isRecycled()){ ... ... ... } } @Override public void onViewAttachedToWindow(@NonNull CustomViewHolder holder) { super.onViewAttachedToWindow(holder); holder.cur.setRecycled(false); } 

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


All Articles