有关setOnClickListener的语法问题?

时间:2014-09-15 12:06:39

标签: android button

有人可以向我解释这段代码吗?

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);
     }
});

在这种情况下,MainActivityDetailActivity是我创建的两个类。

我有点困惑,

  1. 在这种情况下,setOnClickListenerView.OnClickListener的作用是什么?
  2. Intent类的构造函数方法中,对于上下文,为什么我们只能放".this"但我们必须在前面放入MainActivity类?在什么样的情况下我们可以使用".this"

2 个答案:

答案 0 :(得分:1)

  1. setOnClickListener是一种方法。 View.OnClickListener是一个界面。 setOnClickListener方法以View.OnClickListener为参数。语法new Foo() { ... }定义了一个实现接口Foo匿名内部类实例。

  2. this指的是实例,在内部类的情况下是内部类View.OnClickListener实例。您可以通过使用外部类名称对引用进行作用域来引用外部类实例(一个Context的活动)。

答案 1 :(得分:0)

您必须放置MainActivity.this,因为setOnClickListenerView class中的一个界面,并且它包含方法onClick(View v);,如果您将使用此MainActivity.this而不是OnClickListener它将引用MainActiviy.this的上下文,当我们指定MainActivity时,它引用{{1}}类的上下文。这个概念在java中被称为 Shadowing