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

Einsteigerfragen: Probleme mit den Activitys

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von scrats, 25.01.2010.

  1. scrats, 25.01.2010 #1
    scrats

    scrats Threadstarter Neuer Benutzer

    Beiträge:
    18
    Erhaltene Danke:
    0
    Registriert seit:
    25.01.2010
    Also ich hab Erfahrung mit Java, hab aber bissel Probleme mit den Activitys von Android und besonders mit Intent.

    Ich versuche nach dem Muster Model-View-Controller das Programm zu erstellen. Gedacht habe ich es so:
    Main.class(Hauptklasse) soll als erstes gestartet werden und mir das Model initialisieren sowie die View! Dabei soll die View immer über die Main Gehen um befehle an das Model zu geben.

    Und ich hab es so versucht:
    Main als Activity damit es überhaupt gestartet wird.
    Dann erstelle ich die View, bzw starte es als Activity.
    Code:
    Intent myIntent = new Intent(this,WelcomeScreen.class);
    startActivity(myIntent);
    Und da bin ich bei meinem Problem! wie kann ich der View die Main übergeben? Damit man Befehle auf die main ausgeben kann.
    Ich hab auch überlegt eine Weitere Klasse zu erstellen welche als schnittpunkt dient. Aber auch hier hab ich das Problem das die View die Klasse benutzen soll, aber nicht erstellen darf.

    steh grad auf dem schlauch...
     
  2. Basti18, 25.01.2010 #2
    Basti18

    Basti18 Neuer Benutzer

    Beiträge:
    12
    Erhaltene Danke:
    0
    Registriert seit:
    30.11.2009
    Hallo,

    Wenn ich dich richtig verstanden habe:

    Um einen neuen Bildschirm zu erstellen, erstellst du eine neue Klasse, die Activity erweitert, z.B. "public class WelcomeScreen extends Activity {}"
    Im Grunde machst du das gleiche, wie in der von Eclipse erstellten Klasse.

    In der Hauptklasse kannst du dann eine Andere Activity starten, mit z.B.:
    Code:
    Intent myIntent = new Intent(HauptActivity.this,WelcomeScreen.class);
    startActivity(myIntent);
    Allerdings musst du die 2. Activity noch im Manifest als "activity" registrieren. (im Tag "application")

    Hoffe ich konnte dir helfen
    Mfg Basti
     
  3. scrats, 25.01.2010 #3
    scrats

    scrats Threadstarter Neuer Benutzer

    Beiträge:
    18
    Erhaltene Danke:
    0
    Registriert seit:
    25.01.2010
    Das hab ich ja gemacht und funtzt alles! Aber in der 2ten Activity will ich auf methoden der ersten Klasse zugreifen, bzw auf Methoden von Objekten welche die erste Activity erstellt
     
  4. Basti18, 25.01.2010 #4
    Basti18

    Basti18 Neuer Benutzer

    Beiträge:
    12
    Erhaltene Danke:
    0
    Registriert seit:
    30.11.2009
    Achso...
    da kann ich dir auch nicht viel weiterhelfen. Bin auch noch neu im Android-Geschäft. ;)

    Ich weiss nur das du dem Intent Daten mir putExtra(String key, ... value) anheften kannst.
    Wenn du dann die Activity mit startActivity(intent) startest, wird das Intent in der onStart(Intent i, int ID) Methode der gestarteten Activity abgefangen und kann dort ausgewertet werden.

    Hilft das?:p
     
  5. swordi, 25.01.2010 #5
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    wenn du in activity2 auf acticity1 zugreifen willst, musst du dir vorher mal gedanken über dein programm design machen - (nicht design im sinne von aussehen)

    du könntest dir eine helper klasse schreiben, die activity1 verfügbar macht oder sowas

    aber die überlegung vorher sollte sein : Ist es wirklich nötig sowas zu machen?
     
  6. Basti18, 25.01.2010 #6
    Basti18

    Basti18 Neuer Benutzer

    Beiträge:
    12
    Erhaltene Danke:
    0
    Registriert seit:
    30.11.2009
  7. scrats, 25.01.2010 #7
    scrats

    scrats Threadstarter Neuer Benutzer

    Beiträge:
    18
    Erhaltene Danke:
    0
    Registriert seit:
    25.01.2010
    Also ich hab die erste Klasse nur als Activity gemacht damit ich damit das ganze Programm starten kann.

    Bei Java würde ich einfach ein neues Objekt von Welcomescreen erzeugen und im konstruktor sich selber übergeben. Und der WelcomeScreen sollte dann die Grafiken erzeugen und über die Main auf den rest zugreifen über Methoden.

    Und hier ist ja mein Problem wenn etwas bei Android Grafiken erzeugen soll, muss es eine Activity sein.

    Kann ich hier bei Android ein Objekt erzeugen welches sich selber startet als Activity?

    hoffe ich hab mich diesmal klarer ausgedrückt:D
     
  8. Basti18, 25.01.2010 #8
    Basti18

    Basti18 Neuer Benutzer

    Beiträge:
    12
    Erhaltene Danke:
    0
    Registriert seit:
    30.11.2009
    Also ich lerne jetzt seit ca. 5 Tagen für Android zu programmieren und war/bin auch immer verwirrt.
    Bei Android kann man, wie ich verstanden habe, kein neues Activity-Objekt erzeugen und eine Methode darauf aufrufen. Irgend wie scheint sich alles um Intents zu drehen. :D

    Wie lang schreibst du schon für Android?
     
  9. ses, 25.01.2010 #9
    ses

    ses Administrator Team-Mitglied

    Beiträge:
    7,760
    Erhaltene Danke:
    12,125
    Registriert seit:
    09.12.2008
    @scrats: Bitte auf aussagekräftige Beitragstitel achten.

    LG Sebastian
     
  10. scrats, 25.01.2010 #10
    scrats

    scrats Threadstarter Neuer Benutzer

    Beiträge:
    18
    Erhaltene Danke:
    0
    Registriert seit:
    25.01.2010
    In Android selber ein paar Tage aber Java mach ich schon länger! Ich krieg alles hin bis auf die Sachen mit den Intent und Activities. Das ganze Programm funktioniert teoretisch. bis auf die grafische ausgabe und das starten als Android.

    ----

    und das mit dem Beitragstitel! Sorry mein Fehler^^
     
  11. Basti18, 25.01.2010 #11
    Basti18

    Basti18 Neuer Benutzer

    Beiträge:
    12
    Erhaltene Danke:
    0
    Registriert seit:
    30.11.2009
    Was willst du denn eigendlich genau machen?^^
    Poste mal deinen Quelltext ;)
     
  12. scrats, 25.01.2010 #12
    scrats

    scrats Threadstarter Neuer Benutzer

    Beiträge:
    18
    Erhaltene Danke:
    0
    Registriert seit:
    25.01.2010
    Das soll die Hauptklasse sein:
    Code:
    public class Main extends Activity{
    
         private WelcomeScreen welcome;
    
         public void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.main);
             Intent myIntent = new Intent(Main.this,WelcomeScreen.class);
             welcome = new WelcomeScreen(this, myIntent);
         }
    
    
         public void zusaetzlicheMethoden(){
    
         }
    }
    
    Und hier funtzt das startActivity(myIntent);nicht. Wahrscheinlich darf man das nicht^^
    Code:
    public class WelcomeScreen extends Activity{
    
         private Main main;
    
         public WelcomeScreen (Main main, Intent myIntent){
             this.main = main;
             startActivity(myIntent);
         }
    
         public void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.main);
         }
    
    }
    
     
  13. Basti18, 25.01.2010 #13
    Basti18

    Basti18 Neuer Benutzer

    Beiträge:
    12
    Erhaltene Danke:
    0
    Registriert seit:
    30.11.2009
    Das könnte funktionieren:

    Code:
    public class Main extends Activity{
    
         public void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.main);
             Intent myIntent = new Intent(Main.this,WelcomeScreen.class);
             //einen Empfänger registrieren und einen Intent-Filter
             registerReceiver(new primBroadcastReceiver(),new IntentFilter(WelcomeScreen.WELCOME_ACTION));
    
             startActivity(myIntent);
         }
    
         public void zusaetzlicheMethoden(){
    	
         }
    
    	public class myBroadcastReceiver extends BroadcastReceiver {
    		@Override
    		public void onReceive(Context context, Intent intent) {
    			//evtl. noch die "Extras" des Intent auswerten um Bedingungen zu behandeln
    			zusaetzlicheMethode();
    		}    	
       	}    
    }
    
    Code:
    public class WelcomeScreen extends Activity{
    
    	public static final String WELCOME_ACTIOM = "WELCOME_ACTION";
    
        public void onCreate(Bundle savedInstanceState) {
        	super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    	
            //einen Intent erzeugen (evtl. mit daten füllen) und senden
            //alle activities die den Filter auf WELCOME_ACTION gesetzt haben empfangen das Intent in der onReceive()-Methode
            Intent i = new Intent(WELCOME_ACTION);
            sendBroadcast(i);
         }
    }
    

    Wenn irgend etwas falsch ist entschuldige ich mich. Hab den Code jetzt auch nicht ausprobiert.
     
    Zuletzt bearbeitet: 25.01.2010
  14. Mort, 25.01.2010 #14
    Mort

    Mort Android-Lexikon

    Beiträge:
    960
    Erhaltene Danke:
    262
    Registriert seit:
    16.11.2009
    Ähm, du willst eine Activity als Member einer Activity, und diese "Unter-Activity" im Constructor der "Haupt-Activity" starten? Was soll das denn bringen? :confused:
    Starte doch einfach die andere Activity und fertig. Wenn was zurück kommen soll mit "startActivityForResult". Aber Vorsicht: Android hat immer nur eine aktive Activity pro Programm (naja, bis auf ein paar wenige Ausnahmen, die hier nicht interessieren sollen). Der WelcomeScreen ist also "stopped" bis man wieder zurück geht.
    Und von den Konstruktoren würde ich eher die Finger lassen, um die kümmert sich besser das Framework. Man hat ja onCreate und so.
     
  15. scrats, 27.01.2010 #15
    scrats

    scrats Threadstarter Neuer Benutzer

    Beiträge:
    18
    Erhaltene Danke:
    0
    Registriert seit:
    25.01.2010
    Da ich es nicht geschaft habe den Fehler zu beheben, hab ich einfach alles auf den Kopf geworfen und versuche es von einer anderen Richtung.

    Aber Danke an alle!
     

Diese Seite empfehlen