2012-03-30 27 views
1

Ich habe ein großes Problem. Ich habe eine Aktivität, bei der ich zwei ImageViews habe. In onCreate habe ich Bilder auf denen ich 10 Bilder habe. Jedes Mal, wenn ich diese Aktivität starte, erhalten beide ImageViews zufällige Bilder von List und zeigen sie an. Zum Beispiel: Wenn ich mit der Aktivität anfange, kann ich Auto und Bleistift sehen und wenn ich diese Aktivität noch einmal beginne, bekomme ich einen Elefanten und ein Buch. Jetzt ist das mein Problem. Wenn ich die Aktivität starte und mein Telefon blockiere und danach entsperren bekomme ich andere Bilder. Ich denke, dass onCreate erneut aufgerufen wird. Ich schaffeAndroid und onSaveInstance und Restore

@Override  
protected void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 
} 

public void onRestoreInstanceState(Bundle savedInstanceState) { 

    if (savedInstanceState != null) { 
     pictureGameLeft.setImageResource(shapesPictures.get(game.getCurrentLevel().getCurrentPair().getImageLeft())); 
     pictureGameRight.setImageResource(shapesPictures.get(game.getCurrentLevel().getCurrentPair().getImageRight()));   
    } 
} 

pictureGameLeft und Rechts, die im letzten Bilder ist, die zeigt, ist. Ich schreibe sie nach OnCreate-Methode. Wie kann ich zuletzt gesehenes Bild speichern, wenn ich Telefon sperre und entsperren bekomme ich die gleichen Bilder. Vielleicht muss onPause oder onStop angerufen werden?

edit: jetzt:

if (savedInstanceState == null) { 
    game = new Game(); 
    game.initGame(); 
    addElements(result); 

    game.getCurrentLevel().nextPair(); 

    pictureGameLeft.setImageResource(shapesPictures.get(game.getCurrentLevel().getCurrentPair() 
     .getImageLeft())); 
    pictureGameRight.setImageResource(shapesPictures.get(game.getCurrentLevel().getCurrentPair() 
     .getImageRight())); 

    mRedrawHandler.sleep(1000);    
} 
else { 
    pictureGameLeft.setImageResource(shapesPictures.get(game.getCurrentLevel().getCurrentPair(
     .getImageLeft())); 
    pictureGameRight.setImageResource(shapesPictures.get(game.getCurrentLevel().getCurrentPair() 
     .getImageRight())); 
} 

aber ich Nullpointer bekommen.

Antwort

0

Ich würde die aktuelle Auswahl von Bildern in den Präferenzen in dem Moment speichern, in dem die Entscheidung getroffen wird. Dann müssen Sie nicht mit den Live-Zyklus-Methoden herumspielen.

Die Entscheidung, wann die Auswahl getroffen oder eine neue (zufällige) Auswahl getroffen werden soll, ist einfach. Überprüfen Sie einfach, ob

savedInstanceState 

von

public void onCreate (Bundle savedInstanceState) 

null ist. Wenn ja, ist es der erste Anruf. Nachfolgende Wiedereröffnung haben einen Nicht-Null-Wert

+0

jetzt bekomme ich java.lang.RuntimeException: Kann Aktivität nicht pausieren – user1302569

+0

Ist Ihr Code immer noch wie in der Frage? –