Ich habe drei Schaltflächen in einigen Listenelementen in der Listenansicht und beim Klicken auf diese Schaltfläche möchte ich das Layout dieses Listenelements ändern, aber das Problem, mit dem ich konfrontiert bin, ist unten aufgeführt.
1). Auf Knopfdruck ändert sich ein anderes Listen-Layout. 2). Beim Scrollen der Listenansicht wird ein anderes Layout für Listenelemente geändert, auf das ich nicht geklickt habe.
Hier ist der Code der Adapterklasse.
%Vor%Bitte helft mir, dass ich sehr schlecht darin stecke
Schritt 1: Platzieren Sie die Klick-Listener nach dieser Zeile (viewHolder = (ViewHolder) convertView.getTag ())
Schritt 2: Entfernen Sie in der onclick-Methode Ansichtskreationen / löschen Sie Logiken. Ändern Sie den Modellwert ("In Ihrem Fall aktuelle Artikelflag") und rufen Sie die geänderte Methode notifyDataset
auf %Vor%Schritt 3: Ändern Sie die Ansicht basierend auf Ihrem Modellwert ("Flag-Wert")
%Vor%Hinweis: Die Listenansicht bindet nur die Daten und ändert niemals das Viewholder-View-Objekt für jeden Datenwert. Wir müssen die Views Visibility / Background basierend auf dem Datenwert ändern. Wenn Sie " if-Bedingung " verwenden, muss " else " vorhanden sein.
Ich habe gesehen, dass Ihr Adaptercode nur benutzt wird, wenn Bedingung, listview nicht so schlau ist. Wenn Sie also nur if verwenden, dann schreiben Sie else und führen ein Ereignis aus dann kann ListView auch die nächste Position anzeigen, Sichtbarkeit oder alles, was in Ihrem if Teil ist, also schreiben Sie bitte jeden anderen Teil von wenn in Ihrem Adaptercode
Ich schlage vor, dass RecyclerView besser ist als ListView.
Kurze Antwort:
Setzen Sie Ihren onClick-Listener außerhalb des if else-Blocks:
%Vor%Warum das Problem passiert
Was Sie tun, heißt ViewHolderPattern. Es wird hauptsächlich verwendet, um die Leistung der Scroll-Listenansicht zu erhöhen, indem unnötige findViewById s vermieden werden, was ein schwerer Prozess ist.
Lasst uns sehen, wie es funktioniert:
Bitte sehen Sie sich dieses Bild an, das eine normale Liste zeigt:
Unser Adapter hat viele Zeilen, aber nur drei davon füllen die Ansicht. Wenn Sie Ihren Adapter erstellen, sind nur die ersten drei Zeilen null und sollten aufgebläht werden. Andere Ansichten verwenden dieselbe Ansicht, die zuvor erstellt wurde.
%Vor%Der Hinweis ist: Sie sollten nichts einstellen, wenn sonst blockieren. Sie sollten nur Ihre Ansichten in ihnen finden und sie Ihrem viewHolder zuweisen und verwandte Dinge (wie Rand, Padding, Textsize, ...) sehen. Sie sollten in diesem Block keine Ressourcen ausführen oder auf Listener bezogene Dinge klicken (wie setText, setBitmap, Onclicklistener, ...)
WARUM?! Wir haben das vorher geantwortet! weil es nur für die ersten Elemente aufgerufen wird, die die Ansicht füllen!
Tags und Links android button android-listview custom-lists