如何使用Intent构造函数

时间:2017-04-20 12:14:06

标签: android android-intent

这是我的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})`

为什么会这样?

3 个答案:

答案 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);