Ich weiß, dass dies ein sehr häufiges Problem bei der Verwendung von ListView ist. Allerdings konnte ich mit meiner Implementierung nichts falsch finden, da ich das ViewHolder-Muster für meinen benutzerdefinierten Adapter richtig befolgt habe.Android ListView: Änderungen an Elementen beeinflussen andere Elemente
Das Problem:
Änderungen an einem Artikel, wie zum Beispiel das Textview-Text in einer Zeit verändert wirkt sich auf andere zufällige Elemente, wenn/oben nach unten gescrollt. Wenn ich zurück scrolle, wird das ursprüngliche Element sowie andere Elemente geändert. Dieses Problem kann mit einem ViewHolder Muster behoben werden. Es ist seltsam, weil ich immer noch das Problem habe!
Adapter Code:
public class TrackerAdapter extends BaseAdapter {
private Activity activity;
private static LayoutInflater inflater = null;
ArrayList <Set> sets = new ArrayList <>();
public TrackerAdapter(Activity a, final ArrayList <Set> sets) {
this.activity = a;
this.inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.sets = sets;
}
public int getCount() {
return sets.size();
}
public Set getItem(int position) {
return sets.get(position);
}
public long getItemId(int position) {
return position;
}
@Override
public int getViewTypeCount() {
return 1;
}
@Override
public int getItemViewType(int position) {
return position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
View view = convertView;
final Set set = sets.get(position);
final Holder holder;
try {
if (view == null) {
view = inflater.inflate(R.layout.row_single, null);
holder = new Holder();
holder.name = (TextView) view.findViewById(R.id.name);
view.setTag(holder);
} else {
holder = (Holder) view.getTag();
}
holder.name.setText(set.getUser().getName());
} catch (Exception ex) {
Log.d("CHECK", "Error at TrackerAdapter");
Log.d("CHECK", Log.getStackTraceString(ex));
}
return view;
}
public static class Holder {
TextView name;
}
}
Welche Frage haben Sie in meinem Code zu sehen? Habe ich das ViewHolder-Muster richtig implementiert?
Danke für die Antwort! :) Ich bin ein bisschen verwirrt obwohl.Was ist setItems und wann heißt es?Warum haben Sie auch den Konstruktor ausgeleert? – Dinuka
** 1) ** Rufen Sie 'setItems' auf, wenn Sie Änderungen am Datensatz vornehmen. Dazu gehört das Hinzufügen von Objekten, das Entfernen von Objekten, das Ändern von Objekten und das Verschieben von Objekten. ** 2) ** Der Konstruktor ist leer, weil ich dort nichts brauche. Ich erhalte einen 'LayoutInflater', wenn ich ihn von' ListView' (Eltern) brauche, was themenbezogene Probleme vermeiden sollte (imagine activity hatte ein anderes Thema als die Listenansicht). –