Ich habe ein einfaches Code-Snippet für die Implementierung von benutzerdefinierten Listview.Was ist die Arbeit von SetTag und getTag im ViewHolder-Muster?
Mein Code ist wie folgt:
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);
}
}
}
Ich habe so viele Antworten gesehen auf SO und andere Websites und ich verstanden den Recycling-Mechanismus von Listview.
Ich habe auch verstanden, dass von Viewholder, können wir die Kind Ansichten in den Adapter halten und wir müssen findViewById()
viele Male nicht aufrufen. Also, es ist für die Optimierung.
Aber ich habe nur die Verwirrung in setTag(holder)
und getTag()
Methoden. From this question, habe ich erfahren, dass es ein Schlüssel-Wert-Paar für mehrere Objekte ist, so dass wir leicht darauf zugreifen können. Aber ich verstehe nicht, warum sie hier benötigt werden ... weil wir nicht mehrere Halterobjekte haben ... nur müssen wir die Variablen des Halters jedes Mal ändern. können wir hier ohne setTag
und getTag
programmieren?
kann jemand besser erklären, was setTag
und getTag
tun "hier"?
Bitte nicht als Duplikat markieren ... Ich habe so viele Antworten gesehen, konnte aber nicht das richtige für eine bestimmte Situation finden. – xyz
warum nicht versuchen Sie es auf Ihre Weise und sehen, was das Ergebnis ist? – panini
Ich habe es bereits versucht ... Ich habe keine Frage gestellt, ohne jeden Versuch..Wenn Sie wissen, dann geben Sie bitte die Antwort – xyz