Einsteigerfragen: Probleme mit den Activitys

S

scrats

Neues Mitglied
0
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...
 
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
 
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
 
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
 
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?
 
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
 
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?
 
@scrats: Bitte auf aussagekräftige Beitragstitel achten.

LG Sebastian
 
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^^
 
Was willst du denn eigendlich genau machen?^^
Poste mal deinen Quelltext ;)
 
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);
     }

}
 
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:
Ä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.
 
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!
 

Ähnliche Themen

S
Antworten
4
Aufrufe
993
Sempervivum
S
R
Antworten
3
Aufrufe
1.618
Ritartet
R
B
Antworten
4
Aufrufe
486
bb321
B
Zurück
Oben Unten