我有以下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”关键字是什么以及它做了什么,但在这种情况下我看不到逻辑)
答案 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方法。