Android事件监听器

问题描述 投票:0回答:2

我想弄清楚为什么我不能访问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

android event-listener oncreate
2个回答
1
投票

你无法访问其有界区域的视图onCreate()方法的界限。如果你想要那么你必须通过layout-inflater来膨胀视图。


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)

© www.soinside.com 2019 - 2024. All rights reserved.