Aktuelles Layout/view Speichern

  • Antworten:6
Dennis A.
  • Forum-Beiträge: 4

15.06.2011, 19:21:03 via Website

Hallo,

ich habe vor kurzem angefangen mich in android einzulesen und noch nicht so viel erfahrung.

ich habe folgendes Problem:

Ich habe eine simple App, die nur aus einer activity besteht, aber mehrere layouts/views hat. Je nach dem auf welchen button man drückt, wird ein neues Layout/view geladen (über: setContentView). Wenn ich jetzt den Back Button drücke und die App erneut starte lande ich wieder auf dem main layout. Kann ich irgentwie speichern, was das zuletzt gesehen Layout war und sobald der Back button gedrückt wird und die App später neugestartet wird dann dieses Layout wieder laden, sodass man dort weitermachen kann wo man aufgehört hat?!

Danke im Vorraus für jede Hilfe.

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

15.06.2011, 21:33:18 via Website

Erstmal Willkommen im Forum :)

Natürlich kannst du jederzeit alles speichern, was du möchtest.
Schau zB mal nach SharedPreferences, damit könntest du beim Umschalten jeweils die aktive ID speichern und im onCreate() deiner Activity diese ID dann wieder auslesen und setzen.

Antworten
Dennis A.
  • Forum-Beiträge: 4

15.06.2011, 23:07:39 via Website

Hallo,

Danke erstmal.

ich habe etwas gesucht und zB dieses Tutorial gefunden: Tutorial

Dort wird zumindest schon mal etwas gespeichert. Allerdings fehlen dort ausführlichere Erklärungen, sodass mir der Code nicht ganz klar ist. Könntest du/jemand anderes mir vielleicht erklären was genau dort passiert und wie ich das auf mein Problem übertragen kann?

Danke im Vorraus.

Edit: Ich habe weitergesucht und ich glaube ich verstehe jetzt wie das funktioniert. Wo es noch hapert ist: Wie unterscheidet sich das Speichern eines Textes aus einem Textview von dem speichern eines kompletten layouts (beim start dann main3.xml statt main.xml o.ä.). Wie bekomme ich das hin?!

— geändert am 15.06.2011, 23:39:38

Antworten
Ludwig H.
  • Forum-Beiträge: 3.256

16.06.2011, 00:14:40 via App

Naja, wenn du das Layout auf z.b. main3 stellst, speicherst du einfach die Nummer (3) in die SharedPreferences. Diese kannst du dann in der onCreate abfragen und darauf setzen :)

Antworten
Dennis A.
  • Forum-Beiträge: 4

16.06.2011, 08:46:05 via Website

Hallo,

@ luhu: meinst du damit das ich die gespeicherte Zahl direkt bei setContentView(R.layout.main); einfügen à la setContentView(R.layout.main + "gespeicherte nummer"); falls ja, wie geht das? Sorry bin noch relativ neu. Oder war das anders gemeint?

Ich habe mich aber jetzt selbst mithilfe eines anderen Tutorials drangesetzt und folgendes "zustande" gebracht:

1package shared.pref;
2
3import android.app.Activity;
4import android.content.SharedPreferences;
5import android.os.Bundle;
6import android.view.View;
7import android.view.View.OnClickListener;
8import android.widget.Button;
9
10public class SharedActivity extends Activity {
11 /** Called when the activity is first created. */
12 @Override
13 public void onCreate(Bundle savedInstanceState) {
14 super.onCreate(savedInstanceState);
15 setContentView(R.layout.main);
16 LoadPreferences();
17
18 Button button = (Button) findViewById(R.id.button1);
19 button.setOnClickListener(new OnClickListener() {
20
21 @Override
22 public void onClick(View view) {
23 setContentView(R.layout.main2);
24 SavePreferences("Layout", "2");
25 }});
26 }
27
28 private void SavePreferences(String key, String value){
29 SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
30 SharedPreferences.Editor editor = sharedPreferences.edit();
31 editor.putString(key, value);
32 editor.commit();
33 }
34
35 private void LoadPreferences(){
36 SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
37 String save = sharedPreferences.getString("Layout", "");
38
39 if (save.equals ("2"))
40 {
41 setContentView(R.layout.main2);
42 }
43 else
44{
45 setContentView(R.layout.main);
46 }
47
48 }
49}

Könnt ihr mir vielleicht sagen, ob ich auf dem richtigen Weg bin und wo noch Fehler liegen? Wenn ich das Programm starten möchte stürzt es ab...?

Antworten
Ludwig H.
  • Forum-Beiträge: 3.256

16.06.2011, 08:53:51 via App

Ist schon auf dem richtigen Weg, das Tutorial.
Also ich hätte es so gemacht:
Wenn du mit dem Button das Layout auf zum Beispiel 2 setzt, speicherst du auch in den SharedPreferences die 2.
Beim nächsten Start (onCreate und/oder onResume) rufst du dann die Zahl aus den Preferences ab und setzt dann mit einer if-Schleife das Layout.
Zusammenbasteln von Code, wie du es am Anfang gemeint hast, geht (leider?!) nicht.

— geändert am 16.06.2011, 08:54:35

Antworten
Dennis A.
  • Forum-Beiträge: 4

16.06.2011, 12:22:59 via Website

Danke für die Hilfe, habs jetzt so gemacht wie du vorgeschlagen hast und funktioniert jetzt alles wie gewünscht. :)

Antworten