Objekt in mehreren Activity´s

A

afroasiate

Neues Mitglied
1
Hallo an alle,

ich beschäftige mich seit dieser Woche mit der Programmierung von Android Apps und habe mir vorgenommen eine Spiel "Schiffe versenken" zu programmieren.

Seit gestern Abend hänge ich an einem Problem, bei dem ich nicht weiter weiss.

Ich habe in der Activity1 ein Objekt erzeugt, welches ich auch in der Activity2 brauche, jetzt habe ich raus gefunden das man mit Intent.putExtras() das wohl irgendwie hinbekommen kann. Jetzt erscheint mir dieser Weg zu kompliziert, deshalb wollte ich fragen ob es einen anderen Weg gibt.
In dem Objekt befinden sich Methoden wie z.B. anzahlDerZuege oder setSchuss etc.

Je nachdem wie ich das Spiel erweitere brauche ich später die Instanz auch noch in anderen Activity3 und Activity4.


Im Dev Guide von Android habe ich einen Hinweis gefunden, der mir helfen könnte. Leider habe ich noch nicht verstanden wie ich das genau machen kann:

A public static field/method
An alternate way to make data accessible across Activities/Services is to use public static fields and/or methods. You can access these static fields from any other class in your application. To share an object, the activity which creates your object sets a static field to point to this object and any other activity that wants to use this object just accesses this static field.

Mein Code schaut im Moment verkürzt (vereinfacht) ungefähr so aus, ich habe schon mit einem public static Aufruf rumprobiert komme aber nicht weiter.

Kurz ausgedrückt: In der Activity spielen will ich auf das Objekt game aus der Activity SchiffeVersenken zugreifen, möglichst einfach.

Code:
public class SchiffeVersenken extends Activity implements OnClickListener {
	
	Button start;
	ImageButton zelle00;

	public static Game game = new Game();
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {

    	super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        zelle00 = (ImageButton)this.findViewById(R.id.zelle00);
        zelle00.setOnClickListener(this);

        start = (Button)this.findViewById(R.id.start);
        start.setOnClickListener(this);        
        
        

        
    }
    
	public void onClick(View v) {

		if (v == start ) {
		  //Los Gehts!!
	       Intent myIntent = new Intent(v.getContext(), Spielen.class);
	       //  myIntent.putExtra("ObjektString",stringObjektGame);
            startActivityForResult(myIntent, 0);
			
		}


		if (v == zelle00 ) {

			if(game.getFeldwert(0,0) == 1){
				 zelle00.setImageResource(R.drawable.leer);
				 game.setFeldwert(0,0,0);
			 }

			else if(game.getFeldwert(0,0) == 0){
				 zelle00.setImageResource(R.drawable.schiffklein);
				 game.setFeldwert(0,0,1);
			 }
		}

und

Code:
public class Spielen extends Activity implements OnClickListener {
	
	Button treffer;
	Button zurueck;
	
	ImageButton zelle00;
	ImageButton zelle10;
	
	TextView status;
	TextView status1;

	//Integer[][] schiffe;
	
	
	//Game game = new Game();
	Game game;



	
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {

    	super.onCreate(savedInstanceState);
        setContentView(R.layout.spielen);
       
        zelle00 = (ImageButton)this.findViewById(R.id.zelle00);
        zelle00.setOnClickListener(this);        

             
    }
    
 
    
	public void onClick(View v) {
		
		if (v == zelle00 ) {
			
			if(game.setSchuss(0,0) == 0){
				 zelle00.setImageResource(R.drawable.leer);
			 }

			else if(game.setSchuss(0,0) == 1){
				 zelle00.setImageResource(R.drawable.schiffklein);
			 }
		}
		
    }




Schon mal danke für eure Hilfen.

cu
afro
 
Du musst die Objekte die du mit putExtra in eine andere Activity schieben möchtest von Parcelable ableiten.

Das sieht am anfang ein wenig kniffelig aus, ist aber immer Schema F.

Dieses Objekt packst du bevor du die Activity aufrufst mit putExtra in den Intent.

und holst es aus dem Bundle wieder raus (if(null!=bundle) ), welches du von onCreate in deiner 2. Activity bekommst.
 
Zuletzt bearbeitet:
Hmm und wenn ich aus der Activity 2 zurück in die Activity 1 will das selbe spielchen nur rückwärts.... das ist ja nervig. :-(


Und wie wäre es mit den android.app.Application.... Habe da einen Forumsbetrag auf stackoverflow.com gefunden.

Vielleicht habe ich da aber auch was falsch verstanden.
 
Die Möglichkeit war mir zuvor auch noch nicht bekannt, aber sowie ich das sehe kannst du diese Methode genauso verwenden Werte für mehrere Activity's zwischenzuspeichern.

Ist vielleicht jetzt nicht so elegant, da du zentral alle Werte speicherst, und somit jede Activity theoretisch auch auf alle Werte zugreifen kann und eben nicht nur die ihr übergebenene Werte.
 
Ihr habt mich überzeugt ich ändere mein Klassenmodell, sonst ist es doch nur pfusch.

Mal sehen ob ich es jetzt hinbekomme.
 

Ähnliche Themen

D
Antworten
23
Aufrufe
2.513
Data2006
D
M
  • maksimilian
Antworten
15
Aufrufe
1.695
maksimilian
M
M
Antworten
8
Aufrufe
952
deek
D
Zurück
Oben Unten