Hi zusammen.
Ich habe einen ViewFlipper der zwischen verschiedenen Views hin- und herflippt. Durch Einstellungen kann man bestimmte Views "ausschalten" (removeView(View Child)) sodass dieses fortan nicht mehr angezeigt wird und nur noch zwischen den übrigen Views wechselt.
Da ich aber diese Einstellung auch wieder rückgängig machen kann/will (View soll fortan wieder angezeit werden) muss ich es wieder als Child vom ViewFlipper setzen (addView(View Child)), was auch funktioniert, wenn man die App nicht neu startet.
Wenn ich nun aber ein View (nennen wir es Child2) ausschalte, die App anschließend neu Starte und dann in den Einstellungen einstelle, dass Child2 fortan wieder angezeigt werden soll, stürzt die App ab.
Meine Vermutung war, dass Child2 nach dem Neustart erst gar nicht neu geladen wird, und ich es somit auch nicht wieder dem ViewFlipper als Child zuweisen kann.
Deshalb dachte ich mir, dass ich diese ganzen Views beim ersten mal starten der App im SharedPreferences
speicher, um sie somit immer wieder laden und dem ViewFlipper als Child zuweisen kann. Durch Google bin ich auf diese Seite gestoßen: eigene Objekte Speichern
Habe diese Methoden für FrameLayouts angepasst (meine zu wechselnde Views sind FrameLayouts):
//#####################################################################
// SERIALISIERUNG #####################################################
//#####################################################################
public static String objectToString(Object obj) {
String out = null;
if (obj != null) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(obj);
out = new String(Base64Coder.encode(baos.toByteArray()));
} catch (IOException e) {
return null;
}
}
return out;
}
public static Object stringToObject(String str) {
Object out = null;
if (str != null) {
try {
ByteArrayInputStream bios = new ByteArrayInputStream(Base64Coder.decode(str));
ObjectInputStream ois = new ObjectInputStream(bios);
out = ois.readObject();
} catch (IOException e) {
return null;
}catch (ClassNotFoundException e) {
return null;
}
}
return out;
}
public boolean storeMyData(FrameLayout myDataObject, String Dataname ) {
try {
String s = objectToString(myDataObject);
if(s != null && s.length() > 0) {
memoryEdit.putString(Dataname, s);
memoryEdit.commit();
return true;
}
return false;
}catch (Exception e) {
return false;
}
}
public FrameLayout loadMyData(String Dataname) {
if(memory.contains(Dataname)) {
String s = memory.getString(Dataname, "");
if(s.length() > 0) {
try {
return (FrameLayout) stringToObject(s);
}
catch (Exception e) {
return null;
}
}
}
return null;
}
Alles anzeigen
Dies hat - wie erwartet - nicht funktioniert, vermute zum Teil, da ich nicht in die Klassendefinition vom FrameLayout gekommen bin (vll. bin ich zu dumm) und es somit nicht implements Serializable machen konnte.
Ich Hoffe ihr hab eine Lösung, wie ich diese Views beim ersten mal ausführen der App speichern kann, oder bin ich mit meiner Vermutung total auf dem Holzweg?
Sorry wegen dem vielen Text
MfG XoR