Android EventListeners - PullRequest
       12

Android EventListeners

0 голосов
/ 04 марта 2019

Я пытаюсь выяснить, почему я не могу получить доступ к 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 голосов
/ 04 марта 2019

Потому что это одно из правил языка программирования.Вне метода или функции вы можете объявить статические блоки, объявить другие функции или сделать присваивание.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)

0 голосов
/ 04 марта 2019

Вы не можете получить доступ к виду вне его ограниченной области. onCreate() Граница метода.Если вы хотите этого, то вы должны увеличить представление на layout-inflater.

...