我试图弄清楚为什么我无法在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
?
答案 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)