在创建事件处理程序时使用“this”关键字

时间:2012-05-13 00:45:17

标签: java android

我有以下Java代码:

public class FirstActivity extends Activity implements OnClickListener
{

    Button btn;
    TextView textview;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        textview = (TextView)findViewById(R.id.textView2);
        btn = (Button)findViewById(R.id.BtnGoToSecondActivity);
        btn.setOnClickListener(this);
    }

    public void onClick(View v)
    {
        Intent secondActivityIntent = new Intent(this, SecondActivity.class);
        secondActivityIntent.putExtra("Name", textview.getText());
        startActivity(secondActivityIntent);
    }
}

在我上面的示例中点击“this”关键字之前,每一段代码都有意义。 我无法理解在“setOnClickListener()”方法调用中用作参数的“this”关键字。 我还没有创建上面任何使用过的类的实例。如何引用不存在的实例?实例是自动创建的吗?

(我知道“this”关键字是什么以及它做了什么,但在这种情况下我看不到逻辑)

4 个答案:

答案 0 :(得分:3)

您问“是否自动创建了实例?”对此的答案实际上是肯定的。您的应用程序此Activity类的一个实例;实例由框架创建,并由框架用于处理各种事件。

答案 1 :(得分:2)

基本上,这行代码:

btn.setOnClickListener(this);

...声明按钮的事件侦听器与您当前所在的实例相同 - 假设它所属的类(FirstActivity)实现了OnClickListener接口。 / p>

是的,当你调用这个方法时, 已经创建了一个实例,否则根本就无法调用该方法!您恰好在调用setOnClickListener方法时将onCreate() 当前实例作为参数传递。

答案 2 :(得分:2)

如果您正在执行像onCreate()这样的非静态方法,那么该对象显然存在。您的Activity对象由Android调用(这就是您必须将其包含在清单中的原因)。

答案 3 :(得分:1)

你的类是FirstActivity,它实现了OnClickListener接口,在FirstActivity的方法中,“this”是对运行方法的类FirstActivity的实例的引用。(当Android运行活动时,它创建此类的实例。)

由于FirstActivity也是OnClickListener,因此您将FirstActivity类的实例传递给setOnClickListener方法。