有人可以向我解释这段代码吗?
Button button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, DetailActivity.class);
startActivity(intent);
}
});
在这种情况下,MainActivity
和DetailActivity
是我创建的两个类。
我有点困惑,
setOnClickListener
和View.OnClickListener
的作用是什么?Intent
类的构造函数方法中,对于上下文,为什么我们只能放".this"
但我们必须在前面放入MainActivity
类?在什么样的情况下我们可以使用".this"
?答案 0 :(得分:1)
setOnClickListener
是一种方法。 View.OnClickListener
是一个界面。 setOnClickListener
方法以View.OnClickListener
为参数。语法new Foo() { ... }
定义了一个实现接口Foo
的匿名内部类实例。
this
指的是实例,在内部类的情况下是内部类View.OnClickListener
实例。您可以通过使用外部类名称对引用进行作用域来引用外部类实例(一个Context
的活动)。
答案 1 :(得分:0)
您必须放置MainActivity.this
,因为setOnClickListener
是View class
中的一个界面,并且它包含方法onClick(View v);
,如果您将使用此MainActivity.this
而不是OnClickListener
它将引用MainActiviy.this
的上下文,当我们指定MainActivity
时,它引用{{1}}类的上下文。这个概念在java中被称为 Shadowing 。