- Forum-Beiträge: 113
04.02.2015, 15:29:24 via Website
04.02.2015 15:29:24 via Website
Ich werde mich mal schlau machen und melde mich wieder.
04.02.2015, 15:29:24 via Website
04.02.2015 15:29:24 via Website
Ich werde mich mal schlau machen und melde mich wieder.
04.02.2015, 17:38:04 via Website
04.02.2015 17:38:04 via Website
So weit habe ich es verstanden mit dem Serialisieren von Objects.
Diese werden in einer Datei .ser als Bytesequenz gespeichert (serialisiert), diese kann ich dann wieder deserialisieren das heißt wieder auslesen.
Das Serialisieren habe ich mir vorgestellt in der Klasse ColorManager zu implementieren.
public void serializeMap(ColorManager colManager) {
try {
FileOutputStream fileOut= openFileOutput(namefile.bin, Context.MODE_PRIVATE) ;
ObjectOutputStream out = new ObjectOutputStream(fStream);
out.writeObject(colManager);
out.flush();
out.close();
} catch (Exception e) {
}
}
Wie würde dann das deserialisieren aussehen. Wenn die Serialisierung so okay ist
Danke schonmal
— geändert am 04.02.2015, 17:38:42
04.02.2015, 18:03:25 via Website
04.02.2015 18:03:25 via Website
Das Serialisierten sieht schonmal gut aus
Da musst du dir dann mal schaen ob es so funktioniert vlt fehlt dir ein Serializable interface oder die public variablen.
Deserialisieren:
FileInputStream fis = context.openFileInput(fileName);
ObjectInputStream is = new ObjectInputStream(fis);
ColorManager colMan= (ColorManager) is.readObject();
is.close();
fis.close();
return colMan;
LG Pascal //It's not a bug, it's a feature.
05.02.2015, 12:59:58 via Website
05.02.2015 12:59:58 via Website
So habe es nun versucht aber es klappt nicht ganz mit dem Aufstellen der Methoden. Es sieht so weit so aus
public class ColorManager implements Serializable {
//Hier stehen alle anderen Methoden der Klasse ColorManager
public void serializeMap(ColorManager colManager) {
try {
FileOutputStream fileOut= openFileOutput(namefile.bin, Context.MODE_PRIVATE) ;
//openFileOutput wird nicht als Methode erkannt. Gibt es sie? Wie/Wo stelle ich so eine namefile.bin her/hin?
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(colManager);
out.flush();
out.close();
} catch (Exception e) {
}
}
//Diese Methode wird mir auch falsch angezeigt. Wahrscheinlich weil es die Datei namefile.bin nicht existiert
public void deserializeMap(ColorManager colorManager)
{
FileInputStream fis = context.openFileInput(namefile);
ObjectInputStream is = new ObjectInputStream(fis);
ColorManager colMan= (ColorManager) is.readObject();
is.close();
fis.close();
return colMan;
}}
Wie gehe ich am Besten vor? Bzw was brauche ich noch?
Vielen Dank im Voraus
05.02.2015, 16:26:44 via App
05.02.2015 16:26:44 via App
Wenn die Methode als "falsch" angezeigt wird, wird es ja eine Fehlermeldung stehen.
Die deserialize Methode hat void als return Type. Das sollte ColorManger sein.
Ich sage nur: Copy & Paste...
Edit: Den einen Parameter brauchst du auch nicht.
— geändert am 05.02.2015, 16:29:45
Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀
Why Java? - Because I can't C#
05.02.2015, 17:31:36 via Website
05.02.2015 17:31:36 via Website
hab die methoden mal abgeändert und folgendes habe ich nun, es werden mir keine Fehler angezeigt aber speichern kann ich die zustände auch nicht
public static String savedState = "savedState.ser";
public void saveToFile(Context context) {
try {
FileOutputStream fileOut= context.openFileOutput(savedState, Context.MODE_PRIVATE) ;
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(this);
out.flush();
out.close();
System.out.printf("Serialized data is saved in /tmp/employee.ser");
} catch (Exception e) {
System.out.printf("ERROR: Serialized data is saved in /tmp/employee.ser");
e.printStackTrace();
}
}
public static ColorManager readFromFile(Context context) {
ColorManager colManager = null;
try {
FileInputStream fileInputStream = context.openFileInput(savedState);
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
colManager = (ColorManager ) objectInputStream.readObject();
objectInputStream.close();
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
return colManager;
}
In der 3. Activity: rufe ich die Methode saveToFile() in der Methode onBackPressed()
in der 2. Activity: rufe ich die Methode readFromFile() in der Methode onCreate() und onRestart()
05.02.2015, 17:36:41 via Website
05.02.2015 17:36:41 via Website
Wie äußert es sich denn, dass du nicht speichern kannst?
Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀
Why Java? - Because I can't C#
05.02.2015, 17:43:40 via App
05.02.2015 17:43:40 via App
Wenn ich die App verlasse oder zur ersten activity navigiere und dann wieder auf die zweite activity gehe dann sind die Zustände alle wieder gelöscht
05.02.2015, 17:49:16 via Website
05.02.2015 17:49:16 via Website
Vielleicht funktioniert das Lesen dann nicht. Oder die Darstellung der Daten.
Keine Fehler im LogCat? Sonst debug mal Schritt für Schritt, um die Stelle zu finden, wo es hapert.
Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀
Why Java? - Because I can't C#
05.02.2015, 17:52:09 via Website
05.02.2015 17:52:09 via Website
Also im LogCat kommen auch keine Fehler. Ich muss jedoch sagen, dass ich die Iteration durch die GridView nicht mit implementiert habe so dass alle Items durch iteriert werden. Aber zum Testen habe ich es nur mit einem Item versuchen wollen. Leider geht das nicht.
05.02.2015, 17:52:10 via Website
05.02.2015 17:52:10 via Website
Also im LogCat kommen auch keine Fehler. Ich muss jedoch sagen, dass ich die Iteration durch die GridView nicht mit implementiert habe so dass alle Items durch iteriert werden. Aber zum Testen habe ich es nur mit einem Item versuchen wollen. Leider geht das nicht.
05.02.2015, 18:03:20 via Website
05.02.2015 18:03:20 via Website
Dann debug.
Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀
Why Java? - Because I can't C#
05.02.2015, 21:24:58 via Website
05.02.2015 21:24:58 via Website
Ich brauche unbedingt Hilfe ich bekomme das einfach nicht hin. Das debuggen hat mich auch nicht weiter gebracht.
05.02.2015, 21:29:41 via App
05.02.2015 21:29:41 via App
Ich schau mir das nochmal an wenn ich Zeit habe (morgen oder am Wo). Wieso hat dich das debuggen nicht weitergebracht?
Wirs der File gespeichert ?
Kannst du ihn deserialisieren?
Das bekommt man leicht mit dem debugger raus.
LG Pascal //It's not a bug, it's a feature.
06.02.2015, 05:43:30 via App
06.02.2015 05:43:30 via App
Beim debuggen springt er garnicht in die Methode saveToFile() daher denke ich das irgendwas nicht stimmt. Ich werde es später nochmal versuchen und nochmal berichten
06.02.2015, 07:00:07 via App
06.02.2015 07:00:07 via App
Wann rufst du diese auf?
LG Pascal //It's not a bug, it's a feature.
06.02.2015, 08:55:17 via App
06.02.2015 08:55:17 via App
Ich hab es so verstanden. In der dritten activity werden ja die Farben in die HashMap zum jeweiligen GridView Item hinzugefügt. Das heißt ich rufe die Methode saveToFile jedes mal in der onBackPressed() in der letzten Activity auf.
06.02.2015, 10:27:59 via Website
06.02.2015 10:27:59 via Website
Aktuell sieht es so aus
public class ColorManager implements Serializable {
public static String savedState = "savedState.ser";
///hier kommen alle anderen Methoden der ColorManager Klasse
//Serialisieren
public void saveToFile(Context context) {
try {
FileOutputStream fileOutputStream = context.openFileOutput(savedState, Context.MODE_PRIVATE);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(this);
objectOutputStream.close();
fileOutputStream.close();
System.out.printf("Serialized HashMap data is saved in savedState.ser");
} catch (IOException e) {
e.printStackTrace();
}
}
// Deserialisieren
public static ColorManager readFromFile(Context context) {
ColorManager colorManager= null;
try {
FileInputStream fileInputStream = context.openFileInput(savedState);
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
colorManager = (ColorManager) objectInputStream.readObject();
objectInputStream.close();
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
return colorManager;
}
}
In Activity 3: In der Methode onBackPressed() rufe ich die Methode saveToFile() auf uzw. so
public class ShowDetailActivity extends Activity implements ActionBar.Tablistener{
public void onBackPressed() {
super.onBackPressed();
ColorManager colorManager = ColorManager.getColorManager(listItemPos)
colorManager.saveToFile(this);
}
}
Er springt dieses mal in die Methode saveToFile() rein aber die Ausgabe sehe ich nicht in meinem LogCat und ein Fehler wird ebenso nicht angezeigt.
In der 2.Avtivity wo alles gespeichert werden soll (also alle Farben) mache ich folgendes.
@Override
protected void onRestart() {
super.onRestart();
ColorManager cm = ColorManager.getColorManager(listItemPos);
cm = cm.readFromFile(this);
int itemColor = cm.get(index);
gridView.getChildAt(index).setBackgroundColor(itemColor);
}
UPDATE:
Ich habe es hinbekommen mit dem Log Eintrag ich sehe die Ausgabe es wird serialisiert und deserialisiert. Nun wird es trotzdem nicht gespeichert/gesetzt in der onRestart() der 2. Activity
— geändert am 06.02.2015, 11:32:28
06.02.2015, 13:00:19 via Website
06.02.2015 13:00:19 via Website
Es passiert jetzt was ganz komisches.
Beispiel:
2 Activity: Ich klicke das Erste Item --> 3.Activity Ich setzte die Farbe für das angeklickte Item
zurück in die 2.Activity: die Farbe ist gesetzt, wenn ich jetzt runter scrolle färbt sich plötzlich das 20. Item auch ein. Wenn ich nun wieder hochscrolle ist plötzlich das 1. ITEM nicht mehr eingefärbt sondern das 2. Item wenn ich nun wieder runter scrolle dann ist das 19. Item gefärbt.
Ist das ein recycling Problem?
Langsam Verzweifle ich.
BITTE UM HILFE
— geändert am 06.02.2015, 13:02:25
06.02.2015, 13:34:14 via Website
06.02.2015 13:34:14 via Website
Hallo,
Bitte nicht verzweifeln, das ist ganz schlecht. Lieber mal eine pause einlegen und mit neuer Energie in ein Paar Tagen das ganz anschauen. Wenn man etwas anderes dazwischen macht und es sich einige Tage später wieder anschaut kann es sein, dass der Fehler dann ganz offensichtlcih ist.
Wie ist denn dein Code für das GridView?
Vielleicht ist dieser Falsch?
Gibt es irgendwelche komischen LogCat ausgaben?
LG Pascal
LG Pascal //It's not a bug, it's a feature.
06.02.2015, 13:42:12 via Website
06.02.2015 13:42:12 via Website
Hallo Pascal,
danke für den Tipp. Leider bin ich etwas unter Zeitdruck das alles muss spätestens am Donnerstag fertig gestellt sein.
Mein GridView Code sieht so aus:
array = extras.getStringArrayList("aufgabenFiltered");
gridView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, array));
Ich habe keinen extra Adapter implementiert.
Danke nochmal Pascal
EDIT: Im LogCat komm nur ein Fehler wenn ich ein Item auswähle das ich nur durch Scrollen erreichen kann. Dann stürzt die App ab. Im LogCat steht dann folgendes.
Caused by: java.lang.NullPointerException
at de.hsesslingen.test_listview_adapter_aufruf.app.DetailActivity.onRestart(DetailActivity.java:90)
— geändert am 06.02.2015, 13:45:41
06.02.2015, 13:51:46 via App
06.02.2015 13:51:46 via App
Was steht denn in der Zeile? Sollte eigentlich selbsterklärend sein, die Zeile mitzuposten 😉
Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀
Why Java? - Because I can't C#
06.02.2015, 13:55:24 via Website
06.02.2015 13:55:24 via Website
Sorry.
@Override
protected void onRestart() {
super.onRestart();
ColorManager cm = ColorManager.getColorManager(listItemPos);
///cm = cm.readFromFile(this);
int itemColor = cm.get(index);
gridView.getChildAt(index).setBackgroundColor(itemColor); /////////////DAS IST DIE ZEILE
}
— geändert am 06.02.2015, 13:57:50
06.02.2015, 14:03:06 via Website
06.02.2015 14:03:06 via Website
So wie ich das sehe benutzt du den Code falsch
Der ist nicht fürs speichern optimiert.
dafür muss die Klasse geänder werden, damit die Liste der ColorManager auch gepseichert wird
LG Pascal //It's not a bug, it's a feature.
06.02.2015, 14:09:26 via Website
06.02.2015 14:09:26 via Website
Ich speicher die Liste so in der dritten Activity:
@Override
public void onBackPressed() {
super.onBackPressed();
ColorManager colorManager = ColorManager.getColorManager(listItemPos);
colorManager.saveToFile(this);
}
06.02.2015, 14:11:17 via Website
06.02.2015 14:11:17 via Website
Du speicherst das objektorentiert.
Du musst das ganze statisch machen und alles (auch statische liste) serialisieren und speichern.
Sonst funktioniert die Logik mit speuchern nciht.
Und wenn du lädst dann nur im onResume oder im on Crate.
Speicher dann in onDestroy oder onPause.
LG Pascal //It's not a bug, it's a feature.
06.02.2015, 14:20:02 via Website
06.02.2015 14:20:02 via Website
kannst du mir vielleicht ein beispiel machen
ich hab das so nun versucht geht aber auch nicht
@Override
protected void onPause() {
super.onPause();
try {
FileOutputStream fileOutputStream = context.openFileOutput(savedState, Context.MODE_PRIVATE); ///////Zeile 242
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(this);
objectOutputStream.close();
fileOutputStream.close();
Log.i("ColorManager", "Serialisierung erfolgreich");
} catch (IOException e) {
e.printStackTrace();
}
}
bekomme wieder Fehler:
Caused by: java.lang.NullPointerException
at de.hsesslingen.test_listview_adapter_aufruf.app.ShowDetailActivity.onPause(ShowDetailActivity.java:242)
06.02.2015, 16:25:19 via Website
06.02.2015 16:25:19 via Website
Hat jemand ein Vorschlag?
06.02.2015, 17:34:00 via App
06.02.2015 17:34:00 via App
Irgendwas ist da ja null. Das einzige könnte context sein, was ich aber komisch finde. Keine Ahnung...
Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀
Why Java? - Because I can't C#
06.02.2015, 18:48:03 via App
06.02.2015 18:48:03 via App
Ich komme leider garnicht mehr weiter.
06.02.2015, 19:40:55 via App
06.02.2015 19:40:55 via App
Ich hab mir jetzt nur die Letzte Fehlermeldung angeschaut, und den Rest mal übersprungen.
Hast du schon überprüft ob context null is ?
Z.b. so (pseudocode)
if : context == null dann Log("hier liegt das problem")
06.02.2015, 20:50:17 via Website
06.02.2015 20:50:17 via Website
Okay context ist gleich null. Das Problem der GridView, dass diese abstürzt liegt an der Speicherung durch die HashMap. Sind denn meine Serialize und Deserialize Methoden so richtig.
// Serializes an object and saves it to a file
public void saveToFile(Context context) {
try {
FileOutputStream fileOutputStream = context.openFileOutput(savedState, Context.MODE_PRIVATE);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(this);
objectOutputStream.close();
fileOutputStream.close();
Log.i("ColorManager", "Serialisierung erfolgreich");
} catch (IOException e) {
e.printStackTrace();
}
}
// Creates an object by reading it from a file
public static ColorManager readFromFile(Context context) {
ColorManager colorManager= null;
try {
FileInputStream fileInputStream = context.openFileInput(savedState);
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
colorManager = (ColorManager) objectInputStream.readObject();
objectInputStream.close();
fileInputStream.close();
Log.i("ColorManager", "Deserialisierung erfolgreich");
} catch (IOException e) {
e.printStackTrace();
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
return colorManager;
}
Vielleicht sollte ich nicht Context als Parameter übergeben.
— geändert am 06.02.2015, 20:54:22
06.02.2015, 23:39:24 via Website
06.02.2015 23:39:24 via Website
Irgendwann brauchst du den Kontext zum Speichern. Also kümmer dich erstmal darum, dass du den Kontext in die Methode bekommst.
Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀
Why Java? - Because I can't C#
07.02.2015, 00:39:59 via App
07.02.2015 00:39:59 via App
Solange du nicht NULL als Context übergibst, spricht überhaupt nichts dagegen den context einer Methode zu übergeben.
Um ganz ehrlich zu sein, ich war zu faul um mir jetzt alle posts durchzulesen und weiß jetzt auch ned warum dus in einem file speicherst und ned mittels sharedpref oder sqlite DB - dein erstes post hab ich mir durchgelesen ^^
also schreib bitte jetzt mal genau was im moment dein problem is oder schick mir mal deinen code, dann schau ich mir das gerne mal an.
— geändert am 07.02.2015, 00:51:59
07.02.2015, 11:12:25 via Website
07.02.2015 11:12:25 via Website
Hallo Stefan,
ich habe dir eine PN geschickt. Steht alles drin.
LG
Antonio
— geändert am 07.02.2015, 11:14:28
07.02.2015, 12:58:35 via Website
07.02.2015 12:58:35 via Website
Ich bin das nun ALLES KOMPLETT wieder durchgegangen und der Context ist doch nicht gleich null. Aber das Problem liegt weiterhin in diesem Teil des Quellcodes.
@Override
protected void onRestart() {
super.onRestart();
ColorManager cm = ColorManager.getColorManager(listItemPos);
cm = cm.readFromFile(getApplicationContext());
int itemColor = cm.get(index);
gridView.getChildAt(index).setBackgroundColor(itemColor); //////Hier ist NullPointerException
}
Wenn ich das in der onPause() oder onCreate() machen möchte, dann funktioniert das nicht. Da diese beiden Methoden schon beim ersten Aufruf der Activity aufgerufen werden (siehe Activity Lebenszyklus). Das heißt bevor ich überhaupt ein Item in der GridView ausgewählt habe, kann ich unmöglich die Farbe setzen.
EDIT:
Ich habe auch das serialisieren und deserialisieren getestet, das sieht so weit denke ich mal auch ganz okay aus.
— geändert am 07.02.2015, 13:30:52
07.02.2015, 13:42:08 via App
07.02.2015 13:42:08 via App
Ich verstehe jetzt nicht das Problem, das schon in der OnCreate oder on onresume aufzurufen.
Das gridview ist bestimmt null.
Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀
Why Java? - Because I can't C#
07.02.2015, 13:50:25 via Website
07.02.2015 13:50:25 via Website
Pascal P.
Du speicherst das objektorentiert.
Du musst das ganze statisch machen und alles (auch statische liste) serialisieren und speichern.
Sonst funktioniert die Logik mit speuchern nciht.
Und wenn du lädst dann nur im onResume oder im on Crate.
Speicher dann in onDestroy oder onPause.
Das vermute ich auch, dass die GridView NULL ist. Ich denke es liegt daran, dass die GridView jedesmal die Methode getView() aufruft wenn sie ein neues Child View anzeigen möchte. Und mir wird immer wieder ein recycletes Child View zurückgegeben. Ich vermute es liegt daran.
07.02.2015, 14:48:35 via Website
07.02.2015 14:48:35 via Website
Neuer Stand. Die App stürzt nicht mehr ab wenn ich ein Item auswähle das recyclet wurde. Habe mir eine Methode geschrieben etwas umständlich aber funktioniert.
Jedoch besteht immernoch das Problem:
Färbe ich das 1. Item ein so färbt sich beim runter scrollen das recycelte Element mit.
Was kann man da tun?
07.02.2015, 14:57:23 via Website
07.02.2015 14:57:23 via Website
Hallo Antonio,
habe die App bei mir gerade zum laufen bkommen und schaue mir das ganze jetzt mal an.
LG Pascal
LG Pascal //It's not a bug, it's a feature.
07.02.2015, 17:20:02 via App
07.02.2015 17:20:02 via App
Und Pascal was konntest du entdecken? Bin sehr gespannt.
07.02.2015, 17:39:11 via Website
07.02.2015 17:39:11 via Website
Bisher habe ich mir deine Detail Activity angeschaut.
Da hattest du das nicht so umgesetzt wie ich das gemeint hatte.
Du hattest keine schleife über alle GridView childs. Das ahbe ich getestet, aber es hat nicht richtig funktioniert.
Wenn man das mit der Farbe jetzt direkt im ArrayAdapter macht, dann passt das auch.
Jetzt fehlt nur noch das serialisieren
LG Pascal //It's not a bug, it's a feature.
07.02.2015, 18:18:29 via App
07.02.2015 18:18:29 via App
Passt das serialisieren nicht? Wie ich das habe?
07.02.2015, 18:20:13 via Website
07.02.2015 18:20:13 via Website
So bin jetzt duch, bei mir Funktioniert das jetzt
Änderungen:
MainActivity.java
ColorManager cm = ColorManager.readFromFile(this);
if(cm == null){
for (int i = 0; i
{
ColorManager.addColorManager(i);
}
}
Hier wird überprüft ob schonmal etwas gespeichert wurde, wenn ja wird das gespeicherte einfach geladen, und wenn Nein dann werden neue Felder angelegt.
HashMap<Integer, ColorManager> m_colorManagerMap = new HashMap<Integer, ColorManager>(); public void saveToFile(Context context) { try { this.m_colorManagerMap = this.colorManagerMap; //Static liste in eine ObjektVaiable schreiben FileOutputStream fileOutputStream = context.openFileOutput(savedState, Context.MODE_PRIVATE); ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream); objectOutputStream.writeObject(this); objectOutputStream.close(); fileOutputStream.close(); Log.i("ColorManager", "Serialisierung erfolgreich"); } catch (IOException e) { e.printStackTrace(); } }
// Creates an object by reading it from a file
public static ColorManager readFromFile(Context context) {
ColorManager colorManager= null;
try {
FileInputStream fileInputStream = context.openFileInput(savedState);
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
colorManager = (ColorManager) objectInputStream.readObject();
objectInputStream.close();
fileInputStream.close();
Log.i("ColorManager", "Deserialisierung erfolgreich");
ColorManager.colorManagerMap = colorManager.m_colorManagerMap; //Liste wieder static setzen
} catch (IOException e) {
e.printStackTrace();
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
return colorManager;
}
DetailActivity.java
Hier wird die GetView Methode des ArrayAdapter überschrieben, damit die Farben den richtigen Items zugeordnet werden.
final ColorManager cm = ColorManager.getColorManager(listItemPos); //den entsprechenden ColorManager laden
gridView.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, array){
public View getView(int position, View view, ViewGroup viewGroup)
{
final View vi = super.getView(position, view, viewGroup);
String name = (String) this.getItem(position);
TextView txtView = ((TextView)vi);
txtView.setText(name);
if(cm.keyExists(position))
{
txtView.setBackgroundColor(cm.get(position));
Log.d(name, "Set Color:" + cm.get(position) + " for Item pos=" + position);
}
else
{
txtView.setBackgroundColor(Color.WHITE);
}
return vi;
}
});
gridView.setDrawSelectorOnTop(true); //Bei click auf das item kann dieses Markiert werden
@Override
protected void onRestart() {
super.onRestart();
((ArrayAdapter<String>gridView.getAdapter()).notifyDataSetChanged(); //Daten updaten : Bin nicht sicher ob die beiden zeilen benötigt werden
gridView.invalidate();
//Falls was nicht passt hier reloaden bzw. das in der onResume auch tun
}
@Override
public void onBackPressed() {
super.onBackPressed();
ColorManager colorManager = ColorManager.getColorManager(listItemPos);
colorManager.saveToFile(this);
}
@Override
protected void onStop() {
super.onStop();
ColorManager colorManager = ColorManager.getColorManager(listItemPos);
colorManager.saveToFile(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
ColorManager colorManager = ColorManager.getColorManager(listItemPos);
colorManager.saveToFile(this);
}
So das wars im großen und ganzen schon.
Wenn du noch Zeit hast, kannst du noch Kleinigkeiten verbessern, z.b. das in der ShowDetail Activity beim erneuten laden das selectedItem wieder angezeigt wird etc.
PS: Wenn das ein Teil einer Schulischen Arbeit ist, bitte denke daran, deinen Code Ordnungsgemäß zu Kommentieren sonst gibt es abzug .
LG Pascal //It's not a bug, it's a feature.
07.02.2015, 18:43:36 via Website
07.02.2015 18:43:36 via Website
Wow. Ich weiß echt nicht wie ich mich bei dir bedanken soll. DANKE DANKE. Du hast mich gerettet. Ich muss das jetzt nur noch verstehen was da geht. DANKE DANKE
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.