1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

ListViews mit ArrayAdapter

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Keine_Angabe, 04.08.2012.

  1. Keine_Angabe, 04.08.2012 #1
    Keine_Angabe

    Keine_Angabe Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    81
    Erhaltene Danke:
    9
    Registriert seit:
    11.03.2012
    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: 04.08.2012
  2. Madlip, 06.08.2012 #2
    Madlip

    Madlip Fortgeschrittenes Mitglied

    Beiträge:
    434
    Erhaltene Danke:
    72
    Registriert seit:
    03.08.2011
    diese methoden die da etwas mit dem ArrayAdapter zutun haben müssen eigentlich alle in die onCreateView Methode sein.
     

Diese Seite empfehlen