Ho uno snippet di codice semplice per implementare listview personalizzato.Qual è il funzionamento di setTag e getTag nel pattern ViewHolder?
Il mio codice è il seguente:
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);
}
}
}
ho visto così tante risposte su SO e altre siti e ho capito il meccanismo di riciclaggio di listview.
Ho anche capito che dal viewholder, possiamo contenere le visualizzazioni figlio nell'adattatore e non dobbiamo chiamare più volte findViewById()
. Quindi, è per l'ottimizzazione.
Ma ho solo la confusione nei metodi setTag(holder)
e getTag()
. From this question, sono venuto a sapere che è per fare una coppia chiave-valore su più oggetti, in modo che possiamo accedervi facilmente. Ma non capisco perché siano richiesti qui ... perché non abbiamo più oggetti titolare ... solo dobbiamo cambiare le variabili del titolare ogni volta. possiamo codificare qui senza utilizzare setTag
e getTag
?
qualcuno può spiegare meglio che cosa fanno "qui" setTag
e getTag
?
per favore non contrassegnare come duplicato ... Ho visto tante risposte ma non ho trovato il giusto per una situazione particolare. – xyz
perché non provare a modo tuo e vedere qual è il risultato? – panini
Ho già provato ... Non ho fatto domande senza alcun tentativo ... Se sai, allora ti preghiamo di dare la risposta – xyz