ListViews mit ArrayAdapter

Keine_Angabe

Keine_Angabe

Ambitioniertes Mitglied
9
Siehe EDIT weiter unten!

Hallo,
ich bin gerade dabei mein erstes kleines Spiel zu schreiben und verwende für die Highscores zwei ListViews. Es sollen einmal die eigenen Highscores angezeigt werden, die über die Shared Preferences gespiechert werden, und einmal die Online-Highscores über die Google App Engine.
Die Online-Highscores funktionieren ohne Probleme, aber die Offline-Highscores machen mir noch Sorgen. Wenn ich nach dem Spielstart über einen Button in die Highscore-Anzeige komme funktioniert alles wunderbar. Gehe ich aber danach ein zweites mal in die Anzeige stürzt die App ab.
Folgendes habe ich bemerkt:
Code:
if(findViewById(R.id.listView1) != null) {
        list1 = (ListView) findViewById(R.id.listView1);
        adapter1 = new ToplistAdapter(this, 0, listHighscore1);
        runOnUiThread(new ZeigeTopliste1());
        }
Mein Programm stürzt ohne die if-Abfrage immer ab. Die habe ich erst gerade eingefügt. Wenn ich aber dann ein zweites mal die Highscores öffne, dann wird der Offline-Highscore garnicht angezeigt (logisch). Daraus schließe ich aber, dass mein listView1 nach dem ersten mal auf null gesetzt wird und es beim zweiten mal dann kracht, weil es null ist.
Aber was setzt listView1 auf null? Der Adapter? Aufgerufen wird es in ZeigeTopliste1() dann so:
Code:
list1.setAdapter(adapter1);
            adapter1.notifyDataSetChanged();
Vielen Dank und Grüße

Der ursprüngliche Beitrag von 20:55 Uhr wurde um 22:09 Uhr ergänzt:

EDIT
Ok, ich denke ich habe den Fehler gefunden. Ich wollte das ganze auf einem anderen Layout anzeigen lassen: setContentView(R.layout.highscore_layout). Das listView1 befindet sich natürlich auch in dem Layout, weshalb ich es nicht von meinem standard Layout aufrufen kann.
Aber wie bekomme ich die Anzeige nun hin? Ich habe es mit dem Layoutinflater versucht, aber damit wird auch nichts angezeigt.
Hier mal der relevante Code:
Code:
public class StartActivity extends Activity implements OnClickListener {

    private ToplistAdapter adapter1;
    private ListView list1;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button buttonHighscore = (Button) findViewById(R.id.buttonHighscore);
        buttonHighscore.setOnClickListener(this); 
    }

    public void onClick(View v) {
            Thread t1 = new Thread(new HoleHighscores1());
            t1.start();
            setContentView(R.layout.highscore_layout);
        }
    }

    private class HoleHighscores1 implements Runnable {
        public void run() {
            zeigeHighscore1();
        }
    }
    
    private void zeigeHighscore1() {
       .....
     List<String> listAdapter = new ArrayList<String>();
        LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View layout = inflater.inflate(R.layout.highscore_layout, null);
        list1 = (ListView) layout.findViewById(R.id.list1);
        adapter1 = new ToplistAdapter(this, 0, listAdapter);
        runOnUiThread(new ZeigeTopliste1());
    }
    
    private class ZeigeTopliste1 implements Runnable {
        public void run() {
            list1.setAdapter(adapter1);
            adapter1.notifyDataSetChanged();
        }
    }
    
}
Mit dem Layoutinflater stürzt die App zwar nicht ab, aber es wird auch nichts in dem betreffenden ListView angezeigt. Also muss ich das irgendwie falsch machen.
Wäre über jeden Ratschlag dankbar,
Grüße
 
Zuletzt bearbeitet:
diese methoden die da etwas mit dem ArrayAdapter zutun haben müssen eigentlich alle in die onCreateView Methode sein.
 

Ähnliche Themen

B
Antworten
4
Aufrufe
433
bb321
B
FabianDev
Antworten
5
Aufrufe
531
swa00
swa00
MES
Antworten
10
Aufrufe
788
MES
MES
Zurück
Oben Unten