1

我有以下 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

4 回答 4

3

您问“实例是自动创建的吗?” 答案是,实际上,是的。你的应用程序这个 Activity 类的一个实例;该实例由框架创建,并由框架用于处理各种事件。

于 2012-05-13T00:47:24.493 回答
2

基本上,这行代码:

btn.setOnClickListener(this);

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

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

于 2012-05-13T00:48:29.580 回答
2

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

于 2012-05-13T00:50:29.343 回答
1

你的类是FirstActivity,它实现了OnClickListener接口,在FirstActivity的方法里面,“this”是对运行方法的类FirstActivity实例的引用。(当Android运行activity时,它会创建一个实例这个类的)。

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

于 2012-05-13T00:47:12.163 回答