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

Button Verlinkung crashes

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von helgrind13, 11.03.2012.

  1. helgrind13, 11.03.2012 #1
    helgrind13

    helgrind13 Threadstarter Junior Mitglied

    Beiträge:
    25
    Erhaltene Danke:
    0
    Registriert seit:
    20.02.2012
    Hey,
    ich versuche momentan eine Art von Menü zu erstellen, doch dabei geht das immer schief, könntet ihr mir helfen?

    Code:
    package pu.app;
    
    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{
        
         Button kalender = (Button)findViewById(R.id.kalender);
         Button vertretung = (Button)findViewById(R.id.vertretung);
         Button anfahrt = (Button)findViewById(R.id.anfahrt);
         Button raumplan = (Button)findViewById(R.id.raumplan);
         
         kalender.setOnClickListener(menu);
         vertretung.setOnClickListener(menu);
         anfahrt.setOnClickListener(menu);
         raumplan.setOnClickListener(menu);
        
        public OnClickListener menu = new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                switch (v.getId())
                {
                case R.id.kalender: intent = new Intent(main.this, vertretung.class); break;
                case R.id.vertretung: intent = new Intent(main.this, vertretung.class); break;
                case R.id.anfahrt: intent = new Intent(main.this, raumplan.class); break;
                case R.id.raumplan: intent = new Intent(main.this, raumplan.class); break;
                default: intent = new Intent (main.this, main.class);
                }
                startActivity(intent);
            }
            
        };
        
    }

    Freue mich über Antworten!
     
  2. snowman2, 11.03.2012 #2
    snowman2

    snowman2 Erfahrener Benutzer

    Beiträge:
    153
    Erhaltene Danke:
    18
    Registriert seit:
    07.12.2011
    An welcher Stelle geht was schief? Was sagt dein Logcat? Fehlermeldung? XML-Datei?
    Woher kommt main.this? -> Ins Blaue hinein probier es nur mit "this", da deine Activity nicht main heißt.
     
    Zuletzt bearbeitet: 11.03.2012
  3. helgrind13, 11.03.2012 #3
    helgrind13

    helgrind13 Threadstarter Junior Mitglied

    Beiträge:
    25
    Erhaltene Danke:
    0
    Registriert seit:
    20.02.2012
    er sagt folgendes:

    Multiple markers at this line
    - Syntax error on token(s), misplaced construct(s)
    - Syntax error on token "menu", VariableDeclaratorId expected after
    this token


    also soll ich main in meinen activity namen umbennen? Das hilft aber noch nicht viel, weil das Problem ja eher bei folgendem liegt:

     
  4. snowman2, 11.03.2012 #4
    snowman2

    snowman2 Erfahrener Benutzer

    Beiträge:
    153
    Erhaltene Danke:
    18
    Registriert seit:
    07.12.2011
    Füge deiner startactivity mal ein onCreate hinzu und darin weißt du erst die OnClicklistener zu..
    Code:
    @Override
    public void onCreate(Bundle savedInstanceState) {
        kalender.setOnClickListener(menu);
        vertretung.setOnClickListener(menu);
        anfahrt.setOnClickListener(menu);
        raumplan.setOnClickListener(menu); 
    }
     
    helgrind13 bedankt sich.
  5. helgrind13, 11.03.2012 #5
    helgrind13

    helgrind13 Threadstarter Junior Mitglied

    Beiträge:
    25
    Erhaltene Danke:
    0
    Registriert seit:
    20.02.2012
    Nun unterstreicht dieser mir zwar keine Errors mehr, doch leider stürzt nun die ganze App ab. Dabei habe ich aber die ganzen neuen Activities hinzugefügt...

    Was könnte ich übersehen haben?
     
  6. the_alien, 11.03.2012 #6
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    Ja, du setzt deinen View nicht in onCreate().
    Code:
    @Override
    public void onCreate(Bundle savedInstanceState) {
        setContentView(R.layout.my_cool_layout);
        //....
    }
     
    helgrind13 bedankt sich.
  7. snowman2, 11.03.2012 #7
    snowman2

    snowman2 Erfahrener Benutzer

    Beiträge:
    153
    Erhaltene Danke:
    18
    Registriert seit:
    07.12.2011
  8. helgrind13, 11.03.2012 #8
    helgrind13

    helgrind13 Threadstarter Junior Mitglied

    Beiträge:
    25
    Erhaltene Danke:
    0
    Registriert seit:
    20.02.2012
    Naja doch doch das habe ich noch nachträglich gemacht.

    Ich hab nun sogar schon Dummy Activities erstellt für die anderen Activities, die dort verlinkt sind.

    Meine Startactivitiy sieht nun wie folgt aus:
    Code:
    package pu.app;
    
    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 GymTriStart extends Activity{
        
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            kalender.setOnClickListener(menu);
            vertretung.setOnClickListener(menu);
            anfahrt.setOnClickListener(menu);
            raumplan.setOnClickListener(menu); 
        }
        
         Button kalender = (Button)findViewById(R.id.kalender);
         Button vertretung = (Button)findViewById(R.id.vertretung);
         Button anfahrt = (Button)findViewById(R.id.anfahrt);
         Button raumplan = (Button)findViewById(R.id.raumplan);
    
        
        public OnClickListener menu = new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                Intent intent;
                switch (v.getId())
                {
                case R.id.kalender: intent = new Intent(GymTriStart.this, kalender.class); break;
                case R.id.vertretung: intent = new Intent(GymTriStart.this, vertretung.class); break;
                case R.id.anfahrt: intent = new Intent(GymTriStart.this, anfahrt.class); break;
                case R.id.raumplan: intent = new Intent(GymTriStart.this, raumplan.class); break;
                default: intent = new Intent (GymTriStart.this, GymTriStart.class);
                }
                startActivity(intent);
            }
            
        };
        
    }

    des weiteren gibt er folgende Fehlermeldungen aus:

    Die Anwendung "..." wurde unerwartet beendet. Versuchen sie es erneut.
    Schließen erzwingen.
     
  9. snowman2, 11.03.2012 #9
    snowman2

    snowman2 Erfahrener Benutzer

    Beiträge:
    153
    Erhaltene Danke:
    18
    Registriert seit:
    07.12.2011
    Programmcode gehört in eine Methode.
    Variablen definitionen können auch außerhalb stehen.

    Button xxx; ist eine Definition. Da rauf willst du überall in der Activity zugreifen also gehört es in die Klasse der Activity.
    findViewById ist Programmcode > rein damit in onCreate.
     
    helgrind13 bedankt sich.
  10. snowman2, 11.03.2012 #10
    snowman2

    snowman2 Erfahrener Benutzer

    Beiträge:
    153
    Erhaltene Danke:
    18
    Registriert seit:
    07.12.2011
    PS. Du könntest "Button xxx;" auch innerhalb von onCreate definieren, dann könntes du aber nur innerhalb von onCreate() darauf zugreifen.
     
  11. helgrind13, 11.03.2012 #11
    helgrind13

    helgrind13 Threadstarter Junior Mitglied

    Beiträge:
    25
    Erhaltene Danke:
    0
    Registriert seit:
    20.02.2012
    Aber ich hab den Programm Code doch in der void-Methode oder nicht?

    Könntest du das einmal anhand von meinem Code zeigen, wie du das meinst?
     
  12. snowman2, 11.03.2012 #12
    snowman2

    snowman2 Erfahrener Benutzer

    Beiträge:
    153
    Erhaltene Danke:
    18
    Registriert seit:
    07.12.2011
    Die Methode heißt nicht void sondern onCreate. Void heißt nur das sie keinen Parameter bzw. Wert zurückgibt. onCreate ist mit "}" abgeschlossen. Was danach kommt gehört nicht mehr dazu.

    Code:
    package pu.app;
    
    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 GymTriStart extends Activity{
        // Definieren der Variablen
        Button kalender;
        Button vertretung;
        Button anfahrt;
        Button raumplan;
        
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            // Initialisieren der Variablen
           kalender = (Button)findViewById(R.id.kalender);
           vertretung = (Button)findViewById(R.id.vertretung);
           anfahrt = (Button)findViewById(R.id.anfahrt);
           raumplan = (Button)findViewById(R.id.raumplan);
    
            kalender.setOnClickListener(menu);
            vertretung.setOnClickListener(menu);
            anfahrt.setOnClickListener(menu);
            raumplan.setOnClickListener(menu); 
        }
      
        public OnClickListener menu = new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                Intent intent;
                switch (v.getId())
                {
                case R.id.kalender: intent = new Intent(GymTriStart.this, kalender.class); break;
                case R.id.vertretung: intent = new Intent(GymTriStart.this, vertretung.class); break;
                case R.id.anfahrt: intent = new Intent(GymTriStart.this, anfahrt.class); break;
                case R.id.raumplan: intent = new Intent(GymTriStart.this, raumplan.class); break;
                default: intent = new Intent (GymTriStart.this, GymTriStart.class);
                }
                startActivity(intent);
            }
            
        };
        
    }
     
    helgrind13 bedankt sich.
  13. helgrind13, 11.03.2012 #13
    helgrind13

    helgrind13 Threadstarter Junior Mitglied

    Beiträge:
    25
    Erhaltene Danke:
    0
    Registriert seit:
    20.02.2012
    Vielen Dank für eure ausführliche Antworten! :)

    Das einzige Problem ist nur leider noch, dass ich zwei Activities nun schon programmiert habe und wenn ich auf den Button klicke geht auch alles klar, nur leider habe ich noch zwei leer Activities und wenn ich auf diese klicke wird das Programm geschlossen

    Code:
    Code:
    package pu.app;
    
    import android.app.Activity;
    import android.os.Bundle;
    
    public class anfahrt extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.anfahrt);
        }
    }
    
    Das Layout ist vollkommen simpel gehalten und hat eigentlich auch sonst keine weiterem Funktionen...
     
  14. snowman2, 11.03.2012 #14
    snowman2

    snowman2 Erfahrener Benutzer

    Beiträge:
    153
    Erhaltene Danke:
    18
    Registriert seit:
    07.12.2011
    Hast du die Activitys in der Manifestdatei eingetragen?
     
    helgrind13 bedankt sich.
  15. helgrind13, 11.03.2012 #15
    helgrind13

    helgrind13 Threadstarter Junior Mitglied

    Beiträge:
    25
    Erhaltene Danke:
    0
    Registriert seit:
    20.02.2012
    jap, das habe ich, aaaaaber ich hab vergessen die zwei leeren dateien hinzuzufügen, oh man bin ich doof.

    Vielendank!
     

Diese Seite empfehlen