Neues Eingetragenes Listelement überschreibt vorheriges Element

  • Hallo liebe community,


    ich henge an einem.... naja ich denke schon simplen problem, welches ich einfach zu dumm bin es zu lösen. Bin bereits seit heute morgen dabei und komme da einfach nicht weiter. Jetzt bitte ich doch um eure professionelle meinung.


    ALso ich arbeite gerade an einer App die zwei fragmente beinhaltet, sozusagen zwei sichten für die nutzer bietet.


    Code
    public class MainActivity extends FragmentActivity implements ActionBar.TabListener ....


    Auf einem Fragment (also mit der Klasse public class Fragment_A extends Fragment) soll eine Custom ListView angezeigt werden. Eine Einzelne Zeile der ListView beinhaltet eine imageView und zwei Textviews. so wie in diesem tutorial:

    HTML
    http://www.androidhive.info/2012/02/android-custom-listview-with-image-and-text/


    die einträge in die Listview allerdings erfolgt über einen button welches ein Dialogbox aufruft und den nutzer die eingabemöglichkeiten für die Textviews bietet.
    Beispiel: Dialogbox wird geöffnet- Nutzer kann name und Alter eintragen und schließlich auf Ok-Button klicken.


    Die eingegebenen Daten sollen dann halt in der Liste nacheinander angezeigt werden. Das optische habe ich zwar dank des tutorials hinbekommen, jedoch wenn ich einen eintrag gemacht habe und einen neuen machen möchte, wird der alte durch den neuen ersetzt anstatt alles schön untereinander zu reihen.


    Also wenn ich ohne diesen custom view bzw. custom view-adapter arbeite dann klappt das.


    so sieht die fragment klasse aus:



    und der Adapter für die ListView



    wo mache ich hier den fehler?? Wäre super korrekt wenn ihr mir weiter helfen könntet. :-[ ?(

  • Spontan würde ich sagen deine Adapterimplementation ist fehlerhaft.


    Du greifst in deiner OnCreate auch direkt auf Daten vom Fragment zurück, das ist eigentlich böse und mit globalen Vars vergleichbar. Fehler an solcher Stelle findest du nie -> soetwas immer per Parameterübergabe lösen.


    Hier im Forum gibt es ein Tut zum Thema Listview von Uwe, da am besten mal durchlesen, er hat das schön zusammengefasst.



    Was momentan bei Dir passiert - bei jedem Onclick - setzt du den Adapter Neu - da du aber den jedes mal "listView.setAdapter(new MyListAdapter(getActivity()));" einen neuen Adapter kreierst, hat der Listview auch nur 1 Eintrag.


    -> da bei Android immer alles verknüpft ist und auf listener ect pp hört.
    musst du normalerweise nur 1x deinen Adapter für den Listview generieren,
    sobald du dann Daten hinzufügst oder änderst, machst du das direkt mit dem Adapter und das sich etwas geändert hat teilt man dann nur noch per


    myadapter.notifyDataSetChanged();



    mit.



    Also Schema F bei mir


    Activity onCreate


    -> Arrayliste mit Daten wird angelegt
    -> Adapter wird erzeugt und diese Liste übergeben
    -> Listview im Layoutsuchen
    -> Adapter an Listview koppeln
    -> bei Bedarf OnClick Listner setzen
    -> fertig


    -> sobald Daten neu hinzukommen -> myadapter.notifyDataSetChanged();
    -> der Listview wird dann automatisch vom Adapter neu befüllt


    -------------------------------------------------------------------------------------------------



    Code
    public KaderAdapter(Activity context, int textViewResourceId, ArrayList<Spieler> items) {
    	                super(context, textViewResourceId, items);
    	                this.items = items;
    	                this.adaptercontext = context;
    	                mInflater = (LayoutInflater) context.getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    	        }


    Das mit dem Layout ist nur ne Zusatzoption, damit kann ich verschieden Layouts dem Adapter übergeben und bin flexibler.

Jetzt mitmachen!

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