Einer Activity ein Menü "vorschalten"?

M

MarcelT.

Neues Mitglied
0
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
 
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... )
 
  • Danke
Reaktionen: MarcelT.
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:
Ich weiß nicht, vielleicht muss das .Main heißen statt einfach nur Main, ansonsten bin ich überfragt ^^
 
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.
 

Ähnliche Themen

D
  • Data2006
Antworten
14
Aufrufe
487
jogimuc
J
wernho
Antworten
11
Aufrufe
692
wernho
wernho
B
Antworten
3
Aufrufe
1.308
swa00
swa00
Zurück
Oben Unten