1. Hast Du Lust, bei uns mitzuarbeiten und das AH-Team zu verstärken? Alle Details zu dieser aktuellen Herausforderung findest Du hier.
  1. MarcelT., 10.06.2012 #1
    MarcelT.

    MarcelT. Threadstarter Neuer Benutzer

    Mahlzeit,

    mein Problem sieht wie folgt aus:
    Ich bin gerade dabei ein kleines (wirklich kleines) Spielchen zu entwickeln, da ich mich jetzt zwar schon mehrere Monate mit Java beschäftige, allerdings noch nicht lange mit Android-App-Programmierung.
    Zum Start habe ich in Anlehnung an ein paar Tutorials schon die grobe Mechanik implementiert und die funktioniert auch soweit.
    Nun wollte ich dem ganzen aber noch ein Menü vorschalten, wenn man die App startet (Spiel starten, Highscores, Hilfe, etc). Zumindest den Rohbau mit einem einfach "Spiel Starten"-Button.
    Meine Idee war, dass ich der bisherigen Activity (main.class):

    Code:
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.Window;
    
    public class Main extends Activity {
        
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(new GameView(this));
        }
    }

    eine neue Activty "vorschalte", die in ungefähr so aussieht:

    Code:
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    
    public class StartActivity extends Activity implements OnClickListener {
       
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            Button button = (Button) findViewById(R.id.button1);
            button.setOnClickListener((OnClickListener) this);
        }
        
       
        public void onClick (View v) {
            
            startActivity(new Intent(this,Main.class));
        }
    }                

    Also einfach einen Button, der beim Klick dann die main-Activity aufruft. Jedoch findet er die main-Activity nichtmehr, wenn ich in der Manifest-Datei die andere als Start setze

    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="de.marcel.catchthemall"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk android:minSdkVersion="8" />
    
        <application
            android:icon="@drawable/staricon"
            android:label="@string/app_name" >
            <activity
                android:name=".StartActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    
    </manifest>

    Daher meine Frage: Muss ich die main noch irgendwo mit angeben (wenn ja wo) bzw. ist das überhaupt ein "guter" Weg oder geht das ganze eleganter?

    MfG Marcel
     
  2. Sentenza, 10.06.2012 #2
    Sentenza

    Sentenza Erfahrener Benutzer

    Die Activitys müssen auf alle Fälle beide in der Manifest Datei stehen (also zwei Activity-Tags). Wobei ich das bei mir über den Grafischen Editor eingegeben habe. Woran Android erkennt, welche zuerst gestartet werden soll, weiß ich nicht... vermutlich die mit dem ersten Tag.
    //Edit oder die Angabe mit dem "Intent-Filter" steuert die Start-Activity, das würde mehr Sinn machen. Ich würde jedenfalls an deiner Stelle erstmal alles so lassen wie es ist, aber zusätzlich die Main-Acitivity über die Grafische Benutzeroberfläche hinzufügen (AndroidManifest.xml --> Application --> Application Nodes --> Add... )
     
    MarcelT. gefällt das.
  3. MarcelT., 10.06.2012 #3
    MarcelT.

    MarcelT. Threadstarter Neuer Benutzer

    Ah, das ist natürlich der naheliegendste Weg die hinzuzufügen, danke.
    Aber auch nach dem hinzufügen scheint er immernoch die main nicht zu finden.

    Manifest sieht nun nach dem hinzufügen über die Grafische Benutzeroberfläche so aus:
    Code:
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="de.marcel.catchthemall"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk android:minSdkVersion="8" />
    
        <application
            android:icon="@drawable/staricon"
            android:label="@string/app_name" >
            <activity
                android:name=".StartActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity android:name="Main"></activity>
        </application>
    
    </manifest>
    Trotzdem schmiert mir die App beim klicken auf den Button (welcher in der StartActivity ist) noch direkt ab, anstatt zum Spiel zu wechseln.
    (Vorher hatte ich ja nur die main als Activity und da ging das Spiel halt direkt beim Starten der App auch schon los).

    Auszug aus dem Log:
    Code:
    06-10 17:53:16.705: E/AndroidRuntime(860): FATAL EXCEPTION: main
    06-10 17:53:16.705: E/AndroidRuntime(860): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.marcel.catchthemall/de.marcel.catchthemall.Main}: android.util.AndroidRuntimeException: requestFeature() must be called before adding content
    06-10 17:53:16.705: E/AndroidRuntime(860):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
    06-10 17:53:16.705: E/AndroidRuntime(860):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
    06-10 17:53:16.705: E/AndroidRuntime(860):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
    06-10 17:53:16.705: E/AndroidRuntime(860):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
    06-10 17:53:16.705: E/AndroidRuntime(860):     at android.os.Handler.dispatchMessage(Handler.java:99)
    06-10 17:53:16.705: E/AndroidRuntime(860):     at android.os.Looper.loop(Looper.java:123)
    06-10 17:53:16.705: E/AndroidRuntime(860):     at android.app.ActivityThread.main(ActivityThread.java:4627)
    06-10 17:53:16.705: E/AndroidRuntime(860):     at java.lang.reflect.Method.invokeNative(Native Method)
    06-10 17:53:16.705: E/AndroidRuntime(860):     at java.lang.reflect.Method.invoke(Method.java:521)
    06-10 17:53:16.705: E/AndroidRuntime(860):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    06-10 17:53:16.705: E/AndroidRuntime(860):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    06-10 17:53:16.705: E/AndroidRuntime(860):     at dalvik.system.NativeStart.main(Native Method)
    06-10 17:53:16.705: E/AndroidRuntime(860): Caused by: android.util.AndroidRuntimeException: requestFeature() must be called before adding content
    06-10 17:53:16.705: E/AndroidRuntime(860):     at com.android.internal.policy.impl.PhoneWindow.requestFeature(PhoneWindow.java:172)
    06-10 17:53:16.705: E/AndroidRuntime(860):     at android.app.Activity.requestWindowFeature(Activity.java:2719)
    06-10 17:53:16.705: E/AndroidRuntime(860):     at de.marcel.catchthemall.Main.onCreate(Main.java:12)
    06-10 17:53:16.705: E/AndroidRuntime(860):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    06-10 17:53:16.705: E/AndroidRuntime(860):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
    06-10 17:53:16.705: E/AndroidRuntime(860):     ... 11 more
    

    Edit: Ok habs gefunden. Musste "requestWindowFeature(Window.FEATURE_NO_TITLE);" in der main-Activity auskommentieren, warum ist mir zwar nicht bewusst, weils vorher ja auch geklappt hat, aber nun leitet der Button wenigstens aufs Spiel weiter, das ist ja schonmal schön :) Theoretisch sollte das ja auch mit "requestWindowFeature(Window.FEATURE_NO_TITLE);" ja auch mit dem Theme.Black.NoTitleBar.Fullscreen zu lösen sein.
     
    Zuletzt bearbeitet: 10.06.2012
  4. Sentenza, 10.06.2012 #4
    Sentenza

    Sentenza Erfahrener Benutzer

    Ich weiß nicht, vielleicht muss das .Main heißen statt einfach nur Main, ansonsten bin ich überfragt ^^
     
  5. MarcelT., 11.06.2012 #5
    MarcelT.

    MarcelT. Threadstarter Neuer Benutzer

    Ein neuer Tag ein neues "Problem", passt zwar nicht direkt zum Ursprungsthema allerdings muss man ja nicht für jedes Problem einen neues Thema aufmachen.

    Und zwar möchte ich aus einer normalen Klasse eine Activity aufrufen, geht das einfach so?
    Als Beispiel in meinem Spiel: Das Level ist vollständig gelöst (Liste aller Items die einzusammeln sind ist leer) und daher möchte ich zurück ins Hauptmenü beispielsweise.
    Also irgendwie sagen, wenn Liste leer, dann führe StartActivity aus (wo ja mein Menü liegt).

    Habe danach auch schon gegooglet, aber nichts hilfreiches finden können.
    Ist bestimmt wieder so ein "Man sieht den Wald vor lauter Bäumen nicht"-Problem.
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
[OFFEN] Youtube Link Teilen mittels Post auf PHP Script Android App Entwicklung Samstag um 10:23 Uhr
[ERLEDIGT] Bitmap von Activity an Activity übergben Android App Entwicklung 03.09.2017
[OFFEN] Activity als Dialog - RecyclerView funktioniert nicht mehr Android App Entwicklung 14.08.2017
[OFFEN] Problem mit meiner Login App Android App Entwicklung 10.06.2017
[GELÖST] Nach AS Update Fehler Error running app: Default Activity not found Android App Entwicklung 16.05.2017
[GELÖST] Übergabe an zweite Activity Android App Entwicklung 11.05.2017
[OFFEN] Menu zeigt keine Icons nur ... Android App Entwicklung 09.05.2017
[ERLEDIGT] Problem beim Starten einer neuen Activity Android App Entwicklung 21.03.2017
Intent mit Daten (putExtra) zu anderer Activity Android App Entwicklung 14.02.2017
Der Zurück-Button wird nicht angezeigt Android App Entwicklung 23.01.2017

Users found this page by searching for:

  1. android entwicklung app pin vorschalten

Du betrachtest das Thema "Einer Activity ein Menü "vorschalten"?" im Forum "Android App Entwicklung",