Не можете понять использование этого ключевого слова в View.setOnClickListner (это)?

Я знаю, что ключевое слово this относится к текущему экземпляру класса. Но когда мы реализуем View.OnClickListener в нашем классе, то при вызове метода textview.setOnClickListener (this), как аргумент this (объект-экземпляр класса) setOnClickListener (this) автоматически вызывает метод onClick (). Есть ли какой-либо код в классе представления, который принимает объект и вызывает метод onClick в этом коде или что-то еще происходит?

Я хочу знать, что происходит за кулисами, как Android переходит от этого ключевого слова к методу onClick ()? Вот что я хочу спросить?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
0
61
3

Ответы 3

OnClickListener - это интерфейс класса View.
Если ваша деятельность реализует этот интерфейс, установив:

public class MainActivity extends AppCompatActivity implements View.OnClickListener

тогда вы можете установить слушателя для кнопки вида:

myButton.setOnClickListener(this);

и переопределите метод onClick, реализующий его следующим образом:

@Override
public void onClick(View v) {
// your code here
}

Итак, простое объяснение: this означает, что ваше представление будет использовать переопределенный метод onClick вашей активности.

Но я хочу знать, что происходит за кулисами, как Android переходит от этого ключевого слова к методу onClick ()? Вот что я хочу спросить?

Novice 29.07.2018 10:48

Это ключевое слово указывает на переопределенный onClick. Вы должны глубже изучить классы и интерфейсы Java. Если вы будете искать, вам нужно будет следовать множеству руководств.

user8959091 29.07.2018 10:53

Везде, где я читал об этом, говорится, что ключевое слово this относится к текущему экземпляру класса. Можете ли вы сослаться на любую статью, где это правильно объяснено?

Novice 29.07.2018 10:59

Собственно, ключевое слово this означает, что эта деятельность будет обрабатывать метод onClick.

user8959091 29.07.2018 11:01

Создадим интерфейс ElectricityBill

public interface ElectricityBill{
  public void pay(int amount);
}

Теперь есть два способа оплатить счет за электроэнергию: либо зайдя в ближайший офис электроснабжения.

ElectricityBill bill = new ElectricityBill(){
  @Override
  public void pay(int amount){

  }
}
payBill(bill);

или оплатив счет онлайн

    public class User implements ElectricityBill{
     .....
          @Override
          public void pay(int amount){

          }
        }
     .....
  payBill(this);

    }

в обоих случаях пользователь должен заплатить XXX сумму; аналогично, если вы хотите прослушивать входные события, вам нужно либо передать исходный объект View.OnClickListener, либо осуществлять и передать this, чтобы он заработал.

Редактировать:

когда вы передаете это, вы говорите текущему классу, что нужно обрабатывать события щелчка, и для этого необходимо переопределить onClick (). И когда вы передаете объект, вы позволяете исходному классу обрабатывать onClick, создавая анонимный класс и реализуя onClick (). но когда вы передаете это, ваш текущий класс получает право прослушивать входные события. Он становится типом OnClicklistener и получает право прослушивать onClick ()

Вопрос в том, как это ключевое слово направляет переопределенный метод onClick ()? Потому что везде в каждой статье говорится, что это ключевое слово относится к текущему экземпляру класса.

Novice 29.07.2018 11:02

Что такое PayBill?

user8959091 29.07.2018 11:02

payBill () принимает экземпляр ElectricityBill, который вы либо передаете, создавая объект, либо передавая его. @Novice, когда вы передаете это, вы сообщаете текущему классу, что он должен обрабатывать события щелчка самостоятельно, и для этого ему необходимо переопределить onClick (). И когда вы передаете объект, вы позволяете исходному классу обрабатывать onClick, создавая анонимный класс и реализуя onClick (). но когда вы передаете это, ваш текущий класс получает право прослушивать входные события. Он становится типом OnClicklistener и получает право прослушивать onClick ().

vikas kumar 29.07.2018 11:11

Чтобы реализовать View.setOnclickListener в вашем коде, вам необходимо сначала реализовать общедоступный статический интерфейс View.OnClickListener.

как это

    public class MyActivity extends Activity implements View.OnClickListener {
}

Вышеупомянутый интерфейс содержит общедоступный абстрактный метод void "onClick (View v)", который вы переопределяете, чтобы поместить свою логику. Этот метод вызывается при нажатии на представление.

для простоты я создал код

// Create an anonymous implementation of OnClickListener
private OnClickListener mCorkyListener = new OnClickListener() {
    public void onClick(View v) {
      // do something when the button is clicked
    }
};

protected void onCreate(Bundle savedValues) {
    ...
    // Capture our button from layout
    Button button = (Button)findViewById(R.id.corky);
    // Register the onClick listener with the implementation above
    button.setOnClickListener(mCorkyListener);
    ...
}

здесь OnclickListener - это интерфейс, у которого есть объект mCorkyListener аналогично вы можете использовать это ключевое слово вместо mCorkyListener «This» представляет экземпляр текущего класса. Вы можете получить доступ к свойствам и функциям текущего класса с помощью ключевого слова this.

Другие вопросы по теме