Понимание setOnClickListener, View.OnClickListener (), onClick (View v) в связи с концепцией Model-View-Controller - PullRequest
0 голосов
/ 15 июня 2011

Мне ясно, как идентификатор моей кнопки xml преобразуется как кнопка и, в конечном счете, в поле sayIt, однако ...

Button sayIt = (Button) findViewById(R.id.sayit);

... это setOnClickListener, который «регистрируется» на контроллере, чтобы получать уведомления при нажатии кнопки? Если это так, то есть ли метод View.OnClickListener () и его метод onClick (View v), в котором Controller сначала сообщает мой код, эй, на меня нажали, и это то, что запускает пищевую цепочку?

sayIt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

    // Does something cool

}
});

1 Ответ

2 голосов
/ 15 июня 2011

В большинстве случаев, да, View.OnClickListener#onClick() - это стандартная идиома "сделай что-нибудь, когда нажмете эту вещь".Я говорю больше всего, потому что фактическая базовая реализация немного сложнее, и есть разные способы, которыми событие касания перемещается вверх по иерархии представления, прежде чем его обнаруживают как событие «щелчка» и распространяют обратно вниз по иерархии каксобытие щелчка - но если вы не реализуете настраиваемые представления и не хотите настраивать отслеживание на основе касания, вам обычно не нужно беспокоиться об этих событиях.

Например, если вы установите View.OnTouchListener на виде, вы получаете каждое событие касания (вниз, движение, вверх и на поддерживаемых устройствах, даже несколько указателей).В обработчике onTouchEvent (), если вы return true, он сообщает представлению «Меня заинтересовало это событие движения, и я использовал это событие; поэтому притворяйтесь, что событие никогда не происходило, и прекратите его распространение / обработку» -делая это, вы фактически мешаете стандартному обнаружению событий клика OnClickListener.

Но в большинстве случаев, если вы хотите, чтобы что-то произошло, потому что вы нажали кнопку (удивление, удивление :), View.OnClickListenerи View#setOnClickListener() - это то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...