EditText and TextViews... again ;)

  • Heyho, ich nochmal;


    Nachdem ich ja letztes mal schon angefragt habe, das Problem weiterhin bestand und sich als ein anderes ausgab, frage ich noch mal; dieses mal besser vorbereitet und aufbereitet.


    Ich habe das ganze in ein neues Projekt exportiert - der Bug besteht auch hier, Android 2.3.7 -> https://dl.dropbox.com/u/58558990/src-2.zip


    Und wer nichts downloaden möchte, dem habe ich den Code hier noch mal hingepackt:


    Problem: Man kann keinen einzigen EditText bearbeiten; man kann sie anklicken und tippen, aber die Buchstaben erscheinen nicht. Und wenn man es mit buggen geschafft hat ( viele Tasten schnell drücken ) und dem EditText wieder den Focus nimmt, verschwindet der Text wieder.
    Meine Frage jetzt: Jemand eine Ahnung woran das liegt ?


    Android 2.3.7, Gerootet, App läuft ohne Root.


    Erneut am verzweifeln,


    Tion

  • Hmm schau dir mal deinen Code an, denke kurz drüber nach und erkenne das du jedes Mal in deinem Baseadapter die Views neu überschreibst, das kann also so nix werden.


    Noch besser , es sind ja nicht 20 Views, sondern mit jeder Anforderung des Listviews, fügst du neue Listvieweinträge hinzu, das ist glaube nicht so gewollt.


    Ein Listview holt sich immer nur soviele Elemente wie er gerade anzeigt, dazu recyclet er Views, im Umkehrschluss heisst das für Dich, sobald in deiner Editbox etwas geändert worde, musst du den Wert natürlich in einer Datenstruktur ablegen, damit der Adapter, wenn er das nächste mal darauf zugreift auch einen richtigen Wert liefern kann.
    Momentan erzeugst du ständig neue Einträge mit den selben Werten.

  • Tut mir leid, ich verstehe das nicht so ganz...
    Bedeutet das jetzt, dass er im "Sekundentakt" das getView ausführt und quasi immer "neue" EditTexts rendert, wenn die sichtbar sind ? Ich setze den Adapter nur 1 mal, und meines wissens nach ändert sich der ListView ja nicht, bis der Adapter erneut gesetzt wird, oder ? In der Doc konnte ich sowohl unter ListView als auch unter ListAdapter nichts dazu finden...


    Gewollt ist, dass ich 20 Boxen in dem ListView habe, in die dann 20 andere Felder drinne sind. Das funktioniert auch alles. Nur kann ich die Felder nicht bearbeiten. Bei der Anforderung der Box "mache ich sie fertig", indem ich 20 Felder inflate, die in die Box setze und die Box dann an den ListView zurückgebe.


    Edit: Nach einer tiefgreifenden Suche bei Google habe ich die Lösung gefunden; für alle anderen suchenden:
    Wie killphil75 gesagt hat, muss man den Inhalt des EditTextes speichern. Da kommt noch allerdings das Problem, dass der EditText ständig den Focus verliert oder der Cursour "wild" rumspringt; dazu in der Manifest einfach folgenden Wert in der Activity setzen:

    Code
    <activity
                android:name="main.activity"
                android:label="@string/activity_title"
                android:windowSoftInputMode="adjustPan" > <!-- den hier setzen -->
            </activity>

    . Ob es was zur Lösung beiträgt, weiß ich nicht, in dem Code wurde auch

    Code
    android:descendantFocusability="beforeDescendants"

    gesetzt; ich gehe also mal davon aus.


    Danke für den Anstoß, ich war schon dabei, mich bereit zu machen, alles auf einen ScrollView mit einem ListView, in den ich alles reinstecke, umzuschreiben, wobei das wohl nicht so ein Aufwand währe.


    Quelle 1 | Quelle 2 ( wird auch in Quelle 1 verlinkt )


    Edit 2: Quellen etwas kleiner

  • Noch mal eine kurze Antwort:


    Möglichst nicht den EditText in einen ListView packen!


    Oder viel Hirmschmalz auf ständige Sicherung und Wiederherstellung des Inputs verwenden (onKeyPress auswerten und Input zusammenbasteln).


    Gilt ähnlich auch für andere Eingabefelder mit Tastatur oder Dialog (Spinner, DatePicker etc.).


    Der ListView erzeugt seine Teile sehr häufig neu, z.B. beim scrollen, Tastatur oder Dialog ein-/ausblenden etc.pp...


    Besser mit ScrollView / LinearLayout oder anderen Widgets das Layout zusammenbauen.


    Wenn du unbedingt 'nen ListView haben willst, brauchst du auf jeden Fall eine ArrayList<String> o.ä. zur Zwischenspeicherung der Eingaben.

  • ok - dann werde ich den Satz oben mal etwas entschärfen, statt "Niemals" jetzt "Möglichst nicht". *g*


    Klappt es auch beim scrollen und wenn du die Orientation änderst?


    Ich finde eine Lösung ohne ListView besser, wenn man mit Eingabefeldern arbeitet.


    ListView ist perfekt bei sehr großen Listen oder wenn man vorher nicht weiß, wieviel Einträge da sind.

  • Ich habe es so verstanden, dass das ListView lediglich zur Darstellung von Inhalten dient.
    Eigentlich wäre der Weg, so wie ich ihn erwarte, dass nach Antippen eines Items der ListView ein Editor geöffnet wird, in dem ich dann die benötigten Werte eintrage.


    Allerdings kann ich nicht abschätzen, wie hoch da der Aufwand unter Android für ist.
    Auf dem iPhone wären's drei Zeilen. ^^
    (zuzüglich den ungefähr 25 Zeilen, die die IDE automatisch tippt.)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!