1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Objekt in mehreren Activity´s

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von afroasiate, 11.11.2010.

  1. afroasiate, 11.11.2010 #1
    afroasiate

    afroasiate Threadstarter Neuer Benutzer

    Beiträge:
    7
    Erhaltene Danke:
    1
    Registriert seit:
    11.11.2010
    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:

    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
     
  2. Unicate, 11.11.2010 #2
    Unicate

    Unicate Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    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: 11.11.2010
  3. afroasiate, 11.11.2010 #3
    afroasiate

    afroasiate Threadstarter Neuer Benutzer

    Beiträge:
    7
    Erhaltene Danke:
    1
    Registriert seit:
    11.11.2010
    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.
     
  4. funcoder, 11.11.2010 #4
    funcoder

    funcoder Erfahrener Benutzer

    Beiträge:
    218
    Erhaltene Danke:
    38
    Registriert seit:
    15.08.2009
    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.
     
  5. afroasiate, 11.11.2010 #5
    afroasiate

    afroasiate Threadstarter Neuer Benutzer

    Beiträge:
    7
    Erhaltene Danke:
    1
    Registriert seit:
    11.11.2010
    Ihr habt mich überzeugt ich ändere mein Klassenmodell, sonst ist es doch nur pfusch.

    Mal sehen ob ich es jetzt hinbekomme.
     

Diese Seite empfehlen