2016-03-24 22 views
0

Ich versuche eine Gridview einzurichten, die aktualisiert wird, wenn eine neue Suche ausgeführt wird.Android - GridView auf Knopfdruck aktualisieren

das ist mein Aufruf an die gridview

final GridElement_Results adapter = new GridElement_Results(this, savedInstanceState, track_name, album_name, track_num, album_id, album_link); 
    grid = (GridView)findViewById(R.id.grid_results); 
    grid.setAdapter(adapter); 

Wie Sie sehen können einrichten, ich habe es eine Reihe von Arrays bin vorbei.

Auf Knopfdruck wird die Funktion getTracks() aufgerufen, die neue Daten vom Server bekommt. Die Arrays werden mit den neuen Daten aktualisiert, die ich verifiziert habe.

icon_activesearch.setOnClickListener(new View.OnClickListener() { 
            @Override 
            public void onClick(View v) { 

             getTracks("newsearchterm"); 

             adapter.notifyDataSetChanged(); 
             grid.invalidateViews(); 

            } 
           } 
    ); 

Und dann rufe ich adapter.notifyDataSetChanged() und grid.invalidateViews() zu aktualisieren und das Gitter neu zu zeichnen. Aber offensichtlich mache ich hier etwas falsch.

Liegt es daran, dass ich den Adapter als endgültig setze? Um darauf innerhalb der onClick-Methode zuzugreifen, muss ich es auf final setzen.

Was soll ich ändern, damit es funktioniert?

+0

hinzufügen 'getTracks()' Methode –

+0

Sie die neuen Ergebnisse zu Ihrem Adapter vorbei sind? – Francesc

+0

von dem, was ich sehe, übergeben Sie kein Objekt vom Typ List, ArrayList oder Array an Ihren Adapter. Wie genau erhält der Adapter die Daten, die er anzeigt? – Anonymous

Antwort

0

Sie warten sollten, bis neue Daten holen dann Adapter benachrichtigen, aber sie rufen benachrichtigen kurz nach getTracks() ohne Verzögerung

+0

Meinst du, dass notifyDataSetChanged aufgerufen wird, bevor die HTTP-Anfrage abgeschlossen ist? Wie kann ich eine Verzögerung hinzufügen? Schlaf? – fractal5