2016-05-13 6 views
0

Ich bin auf diese Art von Fragen viel gestoßen, aber keine der Antworten löste mein Problem.Android - TextView in einem benutzerdefinierten ListView verliert seinen Inhalt beim Scrollen

Ich entwickle ein Mobile-Shopping-Anwendungsmodell. Ich habe eine benutzerdefinierte ListView mit einem ImageView, und EditText (Menge), 2 Buttons für die Erhöhung und Verringerung der Menge, 3 TextView s eins für den Namen und andere zwei für Preise und ich bin dynamisch laden eine Reihe von Tasten für NetWeights basierend auf der Anforderung durch Java-Code und ich implementiere es mit CustomAdapter (Class) erweitern BaseAdapter und getView().

Problem 1:

wenn ich den Zustand if(convertView==null), setTag(holder) und getTag() werden die dynamisch geladen Buttons dupliziert zu werden und wird in der Zahl verdoppelt.

Problem 2:

Während Scrollen den benutzerdefinierten ListView ich meine Daten auf 2 des TextView s, während der anderen TextView (Namen) am verlieren ist in Ordnung, weil in diesen TextView ich ändere keine Daten zur Laufzeit . Auf den anderen zwei TextView s (Preise) ändere ich die Daten zur Laufzeit mit ButtonClicks (erhöhen und verringern) wo zu dem Zeitpunkt, als ich scroll die beiden TextView s, es verliert seinen Inhalt. Eigentlich hatte ich das gleiche Problem mit dem EditText (Anzeige Quantität), ich löste es mit dem TextWatcher, indem ich den Wert erhielt und es in einem Array übergab und es wieder einstellte. Ich verwendete die gleiche Technik (d. H. Die TextWatcher für die TextView s) Aber das half nicht. Ich versuchte auch, den TextWatcher zu entfernen und den Text mit dem Array zu setzen und TextWatcher hinzuzufügen. Immer noch verliere ich meinen Inhalt in diesen TextView s

Any Vorschläge ??????

+0

versuchen recyclerview statt Listview zu verwenden –

+0

Ihre Adapterklasse –

+0

@shayanpourvatan posten, eigentlich ist mein Code zu lang, nicht Stackoverflow ist mir erlaubt, einen so langen Code :( – Joshua

Antwort

0

Problem 1: Bei der Verwendung von ViewHolder (setTag(), getTag()) werden wir die Ansichten erneut verwenden. Zum Beispiel: Sagen wir, wir haben 10 Listenansicht-Elemente und der Bildschirm kann 3 Elemente gleichzeitig anzeigen. Nehmen wir an, wir fügen 2 Buttons hinzu, um Element 1 aufzulisten. Zum ersten Mal, wenn wir die Listenansicht laden, sehen wir zwei Schaltflächen. Sagen wir jetzt, wir scrollen runter und kommen wieder zum Listenelement 1 zurück, da wir die Ansichten wiederverwenden, wir haben bereits 2 Buttons und wenn wir den Code haben um Buttons mit getTag() hinzuzufügen, werden 2 weitere Buttons hinzugefügt. Ich denke, dass dies das Problem der Tastenverdopplung verursachen kann. So fügen Sie etwas mehr Informationen, Liste Artikel 1 Liste Artikel 4, Listenelement 7 und Listenposition 10 werden alle gleiche Ansicht verwenden, da unser Bildschirm in diesem Beispiel können nur 3 Elemente anzeigen.

Problem 2: Eine Idee ist, alle diese Textwerte in der ArrayList zu speichern. Nehmen wir zum Beispiel an, wir haben in jedem Listenelement eine textView, die inkrementiert/dekrementiert werden kann. Setzen Sie textWatcher auf diese textView und, wenn sich Text ändert, fügen Sie ihn zur arrrayList hinzu, indem Sie 'position' als Index verwenden. Innerhalb getView Methode, wenn Sie getTag() versuchen, die textView mit zuvor gespeicherten Text (der in der ArrayList gespeichert wurde) zu setzen, wenn vorhanden.

+0

Für Problem 2 habe ich Ihren Vorschlag schon müde.Es funktionierte für EditText, aber nicht für TextView :(. Und mein weiterer Zweifel ist, wenn Ihr Vorschlag für EditText funktioniert, warum funktioniert es nicht für TextView? – Joshua

+0

Für Problem 1, ich denke, was Sie sagen, ist richtig sei das Problem. Also, wie würden Sie vorschlagen, dass ich es zu lösen. – Joshua

+0

Ich löste das Duplizierungsproblem (ie) Problem 1. Danke :) – Joshua

Verwandte Themen