2016-05-13 6 views
2

jedes Mal springen ich meine ändern ListView in Activity springt er zum erstenÄnderung Listenansicht ohne

verwende ich diesen Code auf den ersten, die listView

listView.setAdapter(new ArrayAdapter<String>(this, 
        R.layout.home_row, R.id.home_row_price, items)); 

dann stelle ich ein paar mehr Arrays hinzugefügt werden soll Ansicht zur Liste so verwende ich

listView.setAdapter(new ArrayAdapter<String>(this, 
        R.layout.home_row, R.id.home_row_price, items)); 

wieder mit new String[] items

aber jedes Mal springt es zum ersten der listView was kann ich tun?

+0

wo möchten Sie die 'ListView' sein, wenn Sie den Inhalt aktualisieren? –

Antwort

2

Zunächst einmal verwenden, um eine Arraylist statt ein String-Array zum Speichern von Daten. ArrayList kann dynamisch geändert werden (d. H. Sie können die Größe dynamisch ändern). Anstatt einen anonymuos Adapter an Ihren Listenansicht der Einstellung, tun Sie es wie folgt aus:

adapter=new ArrayAdapter(MainActivity.this,android.R.layout.simple_list_item_1,arrayList); 
lv=(ListView)findViewById(R.id.listView); 
lv.setAdapter(adapter); 

Hier habe ich verwendet eine Arraylist für Daten zur Listenansicht einstellen. Und wenn Sie neue Artikel Ihrer Listenansicht hinzufügen, tun es wie folgt aus:

arrayList.add(yourData); 
... 
adapter.notifyDataSetChanged(); 

Die adapter.notifyDataSetChanged() -Methode wird die Listenansicht aktualisieren, ohne in der Listenansicht auf das erste Element zu springen.

Das Problem in Ihrem Code ist, dass jedes Mal, wenn Sie die Daten ändern, Sie einen neuen Adapter zu Ihrem ListView festlegen. Daher wird die ListView "zurückgesetzt" anstelle von "Aktualisieren".

+0

Dann wählen Sie dies als die akzeptierte Antwort –

0

können Sie ändern, verwenden String[] zu

List<String> items= new LinkedList<String>(); 
0

Sie zunächst nicht jedes Mal springen müssen. Wenn Sie in der Listenansicht einen Adapter festlegen möchten, müssen Sie zu diesem Zeitpunkt nur zuerst verschieben, dann können Sie Elemente aus der Liste hinzufügen, aktualisieren oder löschen, ohne zuerst zu wechseln.

Für diese Schritte folgen Sie unten.

So, jetzt, wann immer Sie Änderungen in Artikel-Array vorgenommen haben, rufen Sie einfach über Zeile danach und Ihre Listview wird als pro Änderungen aktualisieren.

Hoffnung, das wird funktionieren

1

Der Sprung zum ersten Element ist normales Verhalten des ListView. Um Elemente zu bestimmen, zu denen statt zum Anfang blättern soll, wird die ID der Elemente verwendet. Aber das funktioniert nur, wenn hasStableIds()true zurückgibt.

ArrayAdapter verwendet die Position als ID, also vielleicht genau das, was Sie suchen. Aber es gibt false von hasStableIds() zurück. Sie könnten es mit einer benutzerdefinierten Unterklasse davon arbeiten lassen.

public class StableArrayAdapter<T> extends ArrayAdapter<T> { 
    public StableArrayAdapter(Context ctx, int res, int txt, T[] obj) { 
     super(ctx, res, txt, obj); 
    } 

    @Override 
    public boolean hasStableIds() { 
     return true; 
    } 
}