ListView wird nur eine Sekunde angezeigt

  • 6 Antworten
  • Letztes Antwortdatum
T

thomas_21

Neues Mitglied
0
Hallo zusammen,

ich bin Neuling (Lernender :smile:) in Sachen Android und Java Programmierung. Dies ist mein erster Post in diesem Forum und ich bitte um Nachsicht. Ich werde mich Bemühen alles richtig zu machen.

Die Suchfunktion habe ich ausführlich genutzt und lange in anderen Beiträgen gelesen. Zu meinem Problem habe ich jedoch keinen passenden Hinweis gefunden.

Deshalb hier mal mein Problem.

Ich habe eine Übungsapp mit zwei Activitys. In der activity_start sind EditText Felder
und zwei Button. Einer zum Speichern und einer der zur zweiten Activity (activity_archiv) wechselt. In der zweiten Activity (activity_archiv) ist ein ListView, welches nach einem Klick auf den Button "Archiv" die Strings aus den EditText Feldern anzeigen soll.

Das Problem ist, das die zweite Activity nach einem Klick auf den Button auch angezeigt wird, aber der Inhalt der ListView ist nur ca. eine Sekunde lang zu sehen und ist dann weg.

Hier habe ich erst mal eine Liste erstellt
Code:
public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_start);
        
        Button archivactivityButton = (Button) findViewById(R.id.archivbutton);
        archivactivityButton.setOnClickListener(this);
        
    }
    
    List<String> Plaenearchiv = new ArrayList<String>();
Hier soll beim Klick auf den Button Speichern die Liste mit den Inhalten der 3 EditText Feldern gefüllt werden
Code:
public void ButtonKlick (View view) {
        
        EditText Feld1 = (EditText)findViewById(R.id.editText1);
        EditText Feld2 = (EditText)findViewById(R.id.editText2);
        EditText Feld3 = (EditText)findViewById(R.id.editText3);
        
        if (Feld1.getText().toString() == "") {
            return;
        }
        if (Feld2.getText().toString() == "") {
            return;
        }
        if (Feld3.getText().toString() == "") {
            return;
        }
                
        Plaenearchiv.add(Feld1.getText().toString() + "|" + Feld2.getText().toString() + "|" + Feld3.getText().toString());
        
  }
Und mit einem Klick auf den Button Archiv soll die zweite Activity angezeigt werden und der Inhalt der Liste an das ListView übergeben und angezeigt werden.
Code:
public void onClick(View v) {
        //aktivity_archiv starten
        Intent intent = new Intent(this, ArchivActivity.class);
        startActivity(intent);
        
        
        switch (v.getId()) {
        case R.id.archivbutton:
           setContentView(R.layout.activity_archiv);
           ArrayAdapter<String> archivadapter = new ArrayAdapter<String>(StartActivity.this, android.R.layout.simple_list_item_1, Plaenearchiv);
           ListView archivlist = (ListView) findViewById(R.id.archivlistView);
              archivlist.setAdapter(archivadapter);
              
         break;
        }
    }
das LogCat gibt folgendes aus
Code:
06-25 14:18:47.402: D/dalvikvm(274): GC_EXTERNAL_ALLOC freed 768 objects / 56216 bytes in 73ms
06-25 14:18:51.332: W/KeyCharacterMap(274): No keyboard for id 0
06-25 14:18:51.332: W/KeyCharacterMap(274): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
06-25 14:19:11.222: D/AndroidRuntime(274): Shutting down VM
06-25 14:19:11.222: W/dalvikvm(274): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
06-25 14:19:11.242: E/AndroidRuntime(274): FATAL EXCEPTION: main
06-25 14:19:11.242: E/AndroidRuntime(274): java.lang.NullPointerException
06-25 14:19:11.242: E/AndroidRuntime(274):     at de.projekt.osdsave.StartActivity.onClick(StartActivity.java:100)
06-25 14:19:11.242: E/AndroidRuntime(274):     at android.view.View.performClick(View.java:2408)
06-25 14:19:11.242: E/AndroidRuntime(274):     at android.view.View$PerformClick.run(View.java:8816)
06-25 14:19:11.242: E/AndroidRuntime(274):     at android.os.Handler.handleCallback(Handler.java:587)
06-25 14:19:11.242: E/AndroidRuntime(274):     at android.os.Handler.dispatchMessage(Handler.java:92)
06-25 14:19:11.242: E/AndroidRuntime(274):     at android.os.Looper.loop(Looper.java:123)
06-25 14:19:11.242: E/AndroidRuntime(274):     at android.app.ActivityThread.main(ActivityThread.java:4627)
06-25 14:19:11.242: E/AndroidRuntime(274):     at java.lang.reflect.Method.invokeNative(Native Method)
06-25 14:19:11.242: E/AndroidRuntime(274):     at java.lang.reflect.Method.invoke(Method.java:521)
06-25 14:19:11.242: E/AndroidRuntime(274):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-25 14:19:11.242: E/AndroidRuntime(274):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-25 14:19:11.242: E/AndroidRuntime(274):     at dalvik.system.NativeStart.main(Native Method)
Ich hoffe, das ich keine Information vergessen habe (oder zuviel gelabert :crying: ?) und das ich einen Tipp bekomme wo mein Fehler ist.

MfG Thomas
 
Bevor ich mir den Quellcode angucke, gucke ich einfach immer auf den Log.
Kannst du mir sagen welche Zeile denn "at de.projekt.osdsave.StartActivity.onClick(StartActivity.java:100)" ist? Die Zeilennummerierung geht ja durchs kopieren oder weglassen von Zeilen in diesem Thread flöten, daher wäre es einfacher, wenn du mal sagst welche Zeile das bei dir ist.
 
Wenn ich den Logeintrag doppelklicke , wird automatisch diese Zeile
Code:
archivlist.setAdapter(archivadapter);
markiert.

Heißt das auch, das das die fragliche Zeile ist ?
 
Wenn ich das richtig sehe findet der deine archiv liste nicht.
Wenn ich hier nachgucke
Activity | Android Developers

findet die Methode auch NUR Views, die in der onCreate Methode gesetzt wurden.

DU solltest wenn du das Layout änderst das ganze mit dem layoutinflater machen
LayoutInflater | Android Developers

mit der inflate() methode erhälst du dann ein View objekt auf diesem kannst du wiederum findViewById aufrufen und dir deine archivlist holen und damit arbeiten.
 
Hallo,

vielen Dank für eure Tipps. Ich habe mich ja nun bei meinem ersten Tag hier nicht mit Ruhm bekleckert.:sad:
Zeile100 in meinem Quelltext war natürlich diese:

Code:
ArrayAdapter<String> archivadapter = new ArrayAdapter<String>(StartActivity.this, android.R.layout.simple_list_item_1, Plaenearchiv);
Ich habe die ganze Nacht gegrübelt und probiert und gelesen und wieder probiert, bis ich den Hacken gefunden habe.

Nachdem ich den Aufruf so geändert habe funktioniert es:
Code:
public void onClick(View v) {   

setContentView(R.layout.activity_archiv);

ArrayAdapter<String> archivadapter = new ArrayAdapter<String>(StartActivity.this, android.R.layout.simple_list_item_1, Plaenearchiv);    
ListView archivlist = (ListView) findViewById(R.id.archivlistView);

archivlist.setAdapter(archivadapter);          
}
Danke für die Denkanstöße.
 
übrigens solltest du Strings nicht mit == vergleichen, sonder mit equals:

Code:
if ("".equals(Feld1.getText().toString())) {
    return;
}
 
Juup, stimmt. Habe ich jetzt auch gerade gelernt und in meinem Quelltext gleich korrigiert. Danke. :thumbup:
 
Zurück
Oben Unten