2011-01-16 9 views
0

mein Problem scheint einfach, aber ich werde es nicht schaffen, eine Antwort hier zu finden.ziehen Sie eine Aktivität in Android

Ich habe verschiedene Aktivitäten in einer Anwendung. Aktivitäten beginnen sich gegenseitig. Ich habe eine "Hauptbildschirm", die alle verschiedenen verfügbaren Ebenen zeigt, Benutzer klickt auf eine Ebene und diese Aktivität ist lunched, wenn Benutzer diese Ebene beendet, kann er die Zurück-Taste drücken, um zum Hauptbildschirm zu gelangen und starte ein anderes Level. Wenn die Zurück-Taste gedrückt wird, möchte ich den "Hauptbildschirm" erneut zeichnen, da diesmal der Daumen für die abgeschlossene Ebene anders ist, um zu zeigen, dass er abgeschlossen ist.

Wie also führe ich eine Re-Draw auf eine Aktivität bei gedrückter Zurück-Taste? (ich nehme an sollte ich einige Code in der Activity.onResume Methode setzen) (I SharedPreferences verwenden Sie den Zustand der fertigen Ebenen zu sparen) ist

Der Hauptbildschirmaktivitäten im Grunde diese:

 
    /** Called when the activity is first created. */ 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.maps);

SharedPreferences settings = getSharedPreferences((getResources().getString(R.string.PREFS_HI)),0); /**/ GridView gridview = (GridView) findViewById(R.id.gridview); gridview.setAdapter(new ImageAdapter(this,(settings.getBoolean("level_1_finished", false)))); /**/ gridview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View v, int position, long id) { //Open the map which was clicked on, if there is one if(position+1 > 1){ Toast.makeText(maps.this, "Level " + (position+1) + " is not yet available!", Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(maps.this, "Opening Level " + (position+1), Toast.LENGTH_SHORT).show(); Intent myIntent = new Intent(v.getContext(), Tutorial2D.class); startActivity(myIntent); } } }); }

ImageAdapter verwendet dann den booleschen Wert true/false, um die Quelle des Bildes zu wählen, entweder den unvollendeten Daumen oder den fertigen Ebenen-Daumen.

+1

Sie haben Ihre Frage selbst beantwortet, überschreiben Sie onResume und aktualisieren Sie Ihre Schaltflächen in der Methode. –

+0

Der "Hauptbildschirm" ist eine GridView, die in der onCreate-Methode erstellt wird. Ich möchte so etwas wie dies tun: @Override public void onResume() { \t/* nennen onCreate hier */ } – theAlse

+0

rufen Sie nicht onCreate in Ihrem onResume Methode, dies ist nicht der richtige Weg ist zu tun es. Sie müssen nur ein Element aktualisieren, nicht die gesamte Ansicht neu zeichnen. – gulbrandr

Antwort

0

Zuerst legen Sie Ihre GridView Objet als Klassenmitglied. Überschreiben Sie dann die onResume()-Methode, in der Sie den Grid-Ansicht-Adapter basierend auf dem Benutzer neu festlegen können.

private GridView gridview; 
@Override 
protected void onResume() { 
    super.onResume(); 
    gridview.setAdapter(/* your new ImageAdapter here */); 
} 
+0

können Sie bitte (in Pseudocode oder Java) zeigen, wie Sie die onResume() Methode implementiert hätten? – theAlse

+0

@ Alborz: Antwort aktualisiert. – gulbrandr

+0

Das war genau das, was ich brauchte, danke Nur eine Follow-up Frage, muss ich "Gridview.setOnItemClickListener (neue OnItemClickListener() {" in der OnResume wieder tun, da die GridView aktualisiert wird? – theAlse

0

Sie sollten die startActivityForResult()-Methode von Activity verwenden. Im Grunde starten Sie Ihre nächste Aktivität und fragen nach dem Status der Anfrage, wenn sie abgeschlossen ist. Kurz bevor es fertig ist, sollte es setResult aufrufen (damit Sie angeben können, ob der Benutzer die Stufe abgeschlossen hat oder nicht). Die Aktivität, die sie aufgerufen hat (Ihr Hauptbildschirm), wird ihre onActivityResult()-Methode aufgerufen haben. In dieser Methode können Sie Ihre Ansichten nach Bedarf aktualisieren.

+0

Ich sehe was du meinst. aber kann onActivityResult() die onCreate-Methode dieser Aktivität aufrufen. (Da sowieso alles in der onCreate-Methode erledigt wird) – theAlse

+0

sollte es nicht. Die onCreate-Methode ist so konzipiert, dass sie nur aufgerufen wird, wenn die Aktivität zuerst geladen oder geladen wird, nachdem sie aus dem Speicher ausgegeben wurde. Sie sollten die Benutzeroberfläche (oder den Adapter hinter Ihrer Benutzeroberfläche) direkt vom onActivityResult-Aufruf aktualisieren. –

Verwandte Themen