Quel est le fonctionnement de setTag et getTag dans le pattern ViewHolder?

J'ai un simple extrait de code pour la mise en œuvre personnalisée listview.

Mon code est comme suit:

WeatherAdapter.java :

public class WeatherAdapter extends ArrayAdapter<weather>{

    Context mcontext; 
    int mlayoutResourceId;    
   weather mdata[] = null;
   View row;

    public WeatherAdapter(Context context, int layoutResourceId, weather[] data) {
        super(context, layoutResourceId, data);
        mlayoutResourceId = layoutResourceId;
       mcontext = context;
        mdata = data;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
      row = convertView;
        WeatherHolder holder = null;

        if(row == null)
        {
            LayoutInflater inflater = ( (Activity) mcontext).getLayoutInflater();
            row = inflater.inflate(mlayoutResourceId, parent, false);

            holder = new WeatherHolder(row);


            row.setTag(holder);

        }
        else
        {
            holder = (WeatherHolder)row.getTag();
        }

        weather w = mdata[position];
        holder.txtTitle.setText(w.mtitle);
        holder.imgIcon.setImageResource(w.micon);

        return row;
    }

WeatherHolder.java:

class WeatherHolder
    {
        ImageView imgIcon;
        TextView txtTitle;


    public WeatherHolder(View v){

          imgIcon = (ImageView)row.findViewById(R.id.imgIcon);
          txtTitle = (TextView)row.findViewById(R.id.txtTitle);

    }
    }
}

J'ai vu tellement de nombreuses réponses sur soi et sur d'autres sites et j'ai compris le recyclage mécanisme de contrôle listview.

J'ai aussi compris qu'à partir de viewholder, nous pouvons maintenir l'enfant vues sur l'adaptateur et nous n'avons pas à appeler findViewById() de nombreuses fois. Donc, c'est à des fins d'optimisation.

Mais j'ai seulement la confusion dans setTag(holder) et getTag() méthodes. À partir de cette questionJe suis venu pour savoir que c'est pour faire une paire clé-valeur sur plusieurs objets, de sorte que nous puissions y avoir accès facilement. Mais, je ne comprends pas pourquoi ils sont nécessaires ici...parce que, nous n'avons pas plusieurs objets titulaire...que nous avons pour le changement du titulaire de variables à chaque fois. pouvons-nous le code ici sans l'aide de setTag et getTag?

quelqu'un peut-il expliquer mieux que setTag et getTag faire "ici"?

source d'informationauteur Fenil