Android EventListeners

时间:2019-03-04 12:58:13

标签: android event-listener oncreate

我试图弄清楚为什么我无法在setOnClickListener()方法之外访问onCreate()

以下代码段位于onCreate()方法的下方。

        TextView numbers = (TextView)findViewById(R.id.numbers);
    numbers.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(MainActivity.this,NumbersActivity.class);
            startActivity(intent);
        }
    });

我正在尝试将EventListener设置为TextView,但是setOnClickListener出现在红线中。为什么会这样呢?我的意思是,如果我将代码段放在onCreate()方法内,则它可以正常工作。为什么我不能从外部访问setOnClickListener

2 个答案:

答案 0 :(得分:1)

您无法在onCreate()方法的边界访问其边界区域之外的视图。如果需要,则必须用layout-inflater扩大视图。

答案 1 :(得分:0)

因为这些是编程语言规则之一。在方法或函数之外,您可以声明静态块,声明其他函数或进行赋值。 setOnClickListener是一种接受为参数interface并看起来像这样的方法:

public interface OnClickListener {
    void onClick(View v);
}

实际上有几个实现。您在上面的示例中使用了其中一个,第二个是访问implement View.OnClickListener界面并覆盖方法onClick(View view),现在您可以将视图预订到该接口numbers.setOnClickListener(this),如果您拥有多个视图订阅后,您可以通过检查onClick(View view)来区分id中的它们,例如:

public void onClick(View view){
   switch(view.getId()){
     case R.id.numbers:
     break;
 }
}

还有另一种实现,如下所示:

public OnClickListener onClick = new OnClickListener() {

  @Override
   public void onClick(View v) {

  }
};

现在您可以使用:numbers.setOnClickListener(onClick)