这是我的MainActivity.java
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);
}
});
}
}
这是我的SecondActivity.java
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);
}
}
}
我正在使用
Intent i=new Intent(MainActivity.this,SecondAcitvity.class);
然后代码正常运行
但是当我使用
时Intent i=new Intent(this,SecondAcitvity.class);
然后就是错误。
无法解析构造函数
Intent(匿名android.view.View.onClickListener,java.lang.Class {com.example.intents.SecondActivity})`
为什么会这样?
答案 0 :(得分:0)
this关键字引用您当前所在的类。
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);
}
});
你实际上会引用View.OnClickListener();
所以在编写上面的代码时你基本上做的是这样说:
Intent i = new Intent(new View.OnClickListener(), SecondActivity.class);
此构造称为内部类。当您在内部类(如onClickListener实现)中时,您需要在使用this
关键字时专门定位外部类。
因此,通过说MainActivity.this
,您明确要求定位外部类(即MainActivity)。
答案 1 :(得分:0)
因为您在匿名类中调用intent构造函数,而这是指当前实例。当您传递'MainActivity.this'时,这意味着您明确说明要考虑的实例。我希望回答这个问题。
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);
}
});
}
答案 2 :(得分:0)
bt.setOnClickListener它实际上是在创建一个实现OnClickListener的匿名内部类。如果你在意图中传递它的匿名内部类的引用,这就是你得到错误的原因。你需要在Intent中传递活动引用。
Intent i=new Intent(this,SecondAcitvity.class);