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

oetzi

oetzi

Fortgeschrittenes Mitglied
11
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
 
ja weil du im listener this schreibst. das kann natürlich nicht funktionieren
 
  • Danke
Reaktionen: GENiALi
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?
 
hmm

java grundlagen nochmal studieren.

dein intent benötigt einen Context und du übergibst den context. ein Listener ist kein Context.
 
  • Danke
Reaktionen: Neeldarax und the_alien
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 = (Button) findViewById(R.id.bt_showLists);         
        button.setOnClickListener(new View.OnClickListener() {             
            public void onClick(View v) {                 
                startActivity(new Intent(NameDeinerActivity.this, ShowShoppingLists.class));             
                }         
            });
        }
Das sollte trotzdem gehen!
 
  • Danke
Reaktionen: oetzi
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 )
 
  • Danke
Reaktionen: the_alien
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.
 
  • Danke
Reaktionen: oetzi
@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.

dein intent benötigt einen Context und du übergibst den context. ein Listener ist kein Context.
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
 
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
 

Ähnliche Themen

5
Antworten
0
Aufrufe
1.152
586920
5
R
Antworten
6
Aufrufe
1.016
swa00
swa00
W
Antworten
2
Aufrufe
744
rene3006
R
Zurück
Oben Unten