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

Erstellung eines Intents nicht in onCreate() möglich?

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von oetzi, 12.10.2011.

  1. oetzi, 12.10.2011 #1
    oetzi

    oetzi Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    148
    Erhaltene Danke:
    8
    Registriert seit:
    25.02.2011
    Phone:
    Samsung Galaxy S5+
    Hallo zusammen,

    bin grad ein bisschen verwirrt.
    Folgender Code wird mit "Constructor is undefined" verweigert:
    Code:
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    //        registerForContextMenu(findViewById(R.id.bt_showLists));
            setContentView(R.layout.main);
            
            //add the listener for the buttons
            final Button button = (Button) findViewById(R.id.bt_showLists);
            button.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    startActivity(new Intent(this, ShowShoppingLists.class));
                }
            });
    Jetzt habe ich die startActivity Zeile mal in eine Methode ausgelagert:
    Code:
        private void showShoppingListActivity(){
            startActivity(new Intent(this, ShowShoppingLists.class));        
        }
    und schon funktioniert es.

    Kann mir das einer erklären?

    Gruß,
    oetzi
     
  2. swordi, 12.10.2011 #2
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    ja weil du im listener this schreibst. das kann natürlich nicht funktionieren
     
    GENiALi bedankt sich.
  3. oetzi, 12.10.2011 #3
    oetzi

    oetzi Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    148
    Erhaltene Danke:
    8
    Registriert seit:
    25.02.2011
    Phone:
    Samsung Galaxy S5+
    Hi Swordi,

    da merke ich doch gerade, dass ich diese Sache mit dem this noch nicht wirklich verstanden habe.
    Worauf verweist das genau? Ich hab da nur so grob "auf sich selbst" im Kopf.
    Und wofür braucht der Intent diesen Verweis?
     
  4. swordi, 12.10.2011 #4
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    hmm

    java grundlagen nochmal studieren.

    dein intent benötigt einen Context und du übergibst den context. ein Listener ist kein Context.
     
    Neeldarax und the_alien haben sich bedankt.
  5. Unicate, 13.10.2011 #5
    Unicate

    Unicate Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    PHP:
        public void onCreate(Bundle savedInstanceState) {
            
    super.onCreate(savedInstanceState);         
            
    registerForContextMenu(findViewById(R.id.bt_showLists));         
            
    setContentView(R.layout.main);                  
            
    //add the listener for the buttons         
            
    final Button button = (ButtonfindViewById(R.id.bt_showLists);         
            
    button.setOnClickListener(new View.OnClickListener() {             
                public 
    void onClick(View v) {                 
                    
    startActivity(new Intent(NameDeinerActivity.thisShowShoppingLists.class));             
                    }         
                });
            }
    Das sollte trotzdem gehen!
     
    oetzi bedankt sich.
  6. swordi, 13.10.2011 #6
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    sagt ja niemand, dass es nicht geht.

    nur halt muss man es richtig machen.

    aber wie genau immer: bevor man den postersteller mal nachdenken lässt, was ihm vielleicht was bringen könnte, kommt immer einer, der den code schon kopierbereit hier reinschreibt.

    da hat der ersteller viel davon gelernt ( falls er die änderung überhaupt sieht )
     
    the_alien bedankt sich.
  7. Unicate, 13.10.2011 #7
    Unicate

    Unicate Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    Entschuldige swordi! Du hast vollkommen Recht, ich hab's vermasselt, jetzt versuch ich's selbst, da muss ich durch...

    Also oetzi:

    Wenn du einen neuen Listener implementierst, dann erstellst du im Prinzip eine neue Klasse. D.h. mit dem Schlüsselwort this ist in diesem Moment nicht deine Activity sondern eher deine Klasse welche du eben neu erstellst.
     
    oetzi bedankt sich.
  8. oetzi, 18.10.2011 #8
    oetzi

    oetzi Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    148
    Erhaltene Danke:
    8
    Registriert seit:
    25.02.2011
    Phone:
    Samsung Galaxy S5+
    @Unicate: Vielen Dank für die kurze und zielführende Erklärung! Ich hab lediglich übersehen, dass ich mich da ja in einer anonymen Klasse befinde... :)


    @Swordi: Du hast sicherlich nicht komplett Unrecht, aber ein Post wie "ja weil du im listener this schreibst. das kann natürlich nicht funktionieren" ist nicht wirklich hilfreich, wenn man ein Brett vorm Kopf hat.
    Ein Hinweis wie: "In dem anonymen Listener verweist this auf den Listener und nicht auf die Activity" (oder so ähnlich) wäre da einfach zielführender gewesen, weil es mir einen konkreteren Hinweis drauf gegeben hätte, woran es liegt.

    Diese Verständisfrage ist allerdings noch offen. Das der Intent einen Context als ersten Übergabeparameter braucht ist klar, aber wofür braucht er den. Das würde mich einfach interessieren.

    Gruß
    oetzi
     
  9. Unicate, 18.10.2011 #9
    Unicate

    Unicate Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    Also eigentlich ist das nebensächlich, aber wenns dich so brennend interessiert,schau doch in die Implementation der Klasse Intent welche auf dem github liegen sollte.

    Grüße

    Sent from my HTC Desire HD using Tapatalk
     

Diese Seite empfehlen