2017-04-20 2 views
-1

Thi zu verwenden ist mein MainActivity.javaWie Intent Konstruktor

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

    Button bt=(Button) findViewById(R.id.bt); 
     bt.setOnClickListener(new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View v) { 
       Intent i=new Intent(MainActivity.this,SecondAcitvity.class); 
       EditText et=(EditText) findViewById(R.id.et); 
       String text=et.getText().toString(); 
       i.putExtra("name",text); 
       startActivity(i); 
      } 
     }); 
    } 
} 

Das ist mein SecondActivity.java

ist
import android.content.Intent; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v7.app.AppCompatActivity; 
import android.widget.TextView; 

public class SecondAcitvity extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_second); 
     TextView tv = (TextView) findViewById(R.id.tv); 
     Intent i=getIntent(); 
     Bundle b=i.getExtras(); 
     if(b!=null) 
     { 
String name=(String)b.get("name"); 
      tv.setText(name); 

     } 

    } 
} 

Whe Ich bin mit

Intent i=new Intent(MainActivity.this,SecondAcitvity.class); 

dann Code läuft gut

aber wenn ich bin mit

Intent i=new Intent(this,SecondAcitvity.class); 

dann gibt es Fehler.

kann nicht aufgelöst werden Konstruktor

Intent (anonym android.view.View.onClickListener, java.lang.Class {com.example.intents.SecondActivity}) `

Warum so? .

+0

welcher Fehler tatsächlich sind Sie –

+1

Im Inneren des 'OnClickListener' bekommen,' this' bezieht sich auf die 'OnClickListener', die kein' Context' ist, das ist, was das 'Intent' Konstruktor erwartet. –

+0

Da Sie sich in der 'View.OnClickListener'-Schnittstelle befinden, bedeutet dies, dass Sie diese Schnittstelle aufrufen, wenn Sie' this' verwenden, nicht die 'MainActivity' –

Antwort

0

Das Schlüsselwort this verweist auf die Klasse, die Sie sich gerade befinden

Button bt=(Button) findViewById(R.id.bt); 
bt.setOnClickListener(new View.OnClickListener() 
{ 
     @Override 
     public void onClick(View v) { 
      Intent i=new Intent(this, SecondAcitvity.class); 
      EditText et = (EditText) findViewById(R.id.et); 
      String text = et.getText().toString(); 
      i.putExtra("name",text); 
      startActivity(i); 
    } 
}); 

Sie würden die View.OnClickListener(); tatsächlich verweisen, so was Sie im Grunde tun, wenn Sie den obigen Code zu schreiben sagt dies:

Intent i = new Intent(new View.OnClickListener(), SecondActivity.class); 

Dieses Konstrukt wird als innere Klasse bezeichnet. Wenn Sie sich in einer inneren Klasse befinden (wie die onClickListener-Implementierung), müssen Sie die äußere Klasse gezielt ansprechen, wenn Sie das Schlüsselwort this verwenden.

Also, indem Sie sagen MainActivity.this, Sie explizit fragen, die äußere Klasse (MainActivity) Ziel.

0

Weil Sie den Intent-Konstruktor in der anonymen Klasse aufrufen, und dies bezieht sich auf die aktuelle Instanz. Und wenn Sie 'MainActivity.this' übergeben, bedeutet das, dass Sie explizit sagen, welche Instanz zu berücksichtigen ist. Ich hoffe, die Frage zu beantworten.

0

bt.setOnClickListener erstellt tatsächlich eine anonyme innere Klasse, die OnClickListener implementiert. Wenn Sie dies in der Absicht weitergeben, wird der Verweis auf die anonyme innere Klasse, weshalb Sie einen Fehler erhalten haben. Sie müssen die Aktivitätsreferenz innerhalb der Absicht übergeben.

Intent i=new Intent(this,SecondAcitvity.class); 
Verwandte Themen