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




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 вашей активности.
Это ключевое слово указывает на переопределенный onClick. Вы должны глубже изучить классы и интерфейсы Java. Если вы будете искать, вам нужно будет следовать множеству руководств.
Везде, где я читал об этом, говорится, что ключевое слово this относится к текущему экземпляру класса. Можете ли вы сослаться на любую статью, где это правильно объяснено?
Собственно, ключевое слово this означает, что эта деятельность будет обрабатывать метод onClick.
Создадим интерфейс 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 ()? Потому что везде в каждой статье говорится, что это ключевое слово относится к текущему экземпляру класса.
Что такое PayBill?
payBill () принимает экземпляр ElectricityBill, который вы либо передаете, создавая объект, либо передавая его. @Novice, когда вы передаете это, вы сообщаете текущему классу, что он должен обрабатывать события щелчка самостоятельно, и для этого ему необходимо переопределить onClick (). И когда вы передаете объект, вы позволяете исходному классу обрабатывать onClick, создавая анонимный класс и реализуя onClick (). но когда вы передаете это, ваш текущий класс получает право прослушивать входные события. Он становится типом OnClicklistener и получает право прослушивать onClick ().
Чтобы реализовать 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.
Но я хочу знать, что происходит за кулисами, как Android переходит от этого ключевого слова к методу onClick ()? Вот что я хочу спросить?