Кнопки просмотров в андроиде - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть сомнения, когда я задаю функцию onClick для кнопки, почему View используется в качестве параметра?и что происходит, когда мы не указываем это представление

Пример:

public void ara(View button){
}

здесь onClick функция кнопки: ara

Спасибо

Ответы [ 4 ]

0 голосов
/ 08 февраля 2019

Как вы можете видеть в документации: Ответ на события кликов.

Button button = (Button) findViewById(R.id.button_send);
button.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        // Do something in response to button click
    }
}); 

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

Быть общедоступным

Return void

Определить представление как его единственный параметр (это будет представление, по которому щелкнули).

0 голосов
/ 08 февраля 2019

Представление - это параметр, которому я верю, потому что это ваш способ сказать, какое представление инициировало обратный вызов.

Определение интерфейса для обратного вызова, вызываемого при щелчке по представлению. ViewOnClickListener

И вы настроили его так:

final Button button = findViewById(R.id.button_id);
         button.setOnClickListener(new View.OnClickListener() {
             public void onClick(View v) {
                 // View v is the button in this case.
                 // Here you add what to do when this callback is initiated.
             }
         });
     }

В этом фрагменте кода обратите внимание, что:

  1. Сначала вы должны понять, что кнопка - это просто другой вид.
  2. Теперь вы заявляете, что ваша Кнопка соответствует кнопке, описанной вами в ваших макетах.Это делается с помощью final Button button = findViewById(R.id.button_id); принять к сведению находку Просмотр ById.
  3. Весь смысл кнопки в том, что когда вы нажимаете ее, она должна что-то делать.Это что-то это то, что известно как обратный вызов .Вот почему вы делаете button.setOnClickListener (от View.setOnClickListener).Вы в основном говорите, что Баттон - это точка зрения, которая говорит прямо сейчас, и что View.OnClickListener должен слушать то, что говорит эта точка зрения.
  4. Теперь мы подошли к последнему пункту, почему существует View v в onClick(View v).Представление, которое говорит, будет View v.Почему это полезно?это так, что вы можете ссылаться на одного и того же слушателя (обратный вызов) несколько раз.В этом случае мы сделали обратный вызов на лету, когда сделали new View.OnClickListener().Но что, если мы не сделали?Что если несколько кнопок ссылаются на одного и того же слушателя?Это когда View v становится важным.Это так, что мы можем сделать что-то вроде v.getId(), чтобы мы знали, какой вид говорил (инициировал обратный вызов).Эта функция будет возвращать идентификатор R.id того вида, который ее вызвал.В этом случае мы объявили кнопку с R.id.button_id, поэтому мы знаем, что кнопка ее назвала.
0 голосов
/ 08 февраля 2019

View используется в качестве параметра в методе onClick(), потому что это представление, к которому прикреплен OnClickListener.

Это очень полезно несколькими способами, например, если View является TextView, и вы хотите обновить его текст при нажатии на представление.

Другие распространенные варианты использования:

  • Настройка видимости вида

  • Передача вида в ObjectAnimator для анимации принажав

  • Выборка Context - view.getContext()

В целом, это просто необходимый параметр для того, чтобы вы могли либо вносить изменения в представлениеOnClickListener принадлежит или для вас View для других целей или расчетов.

Кроме того, если вы не включите View в метод onClick(), ваш код не будет скомпилирован.Это связано с тем, что OnClickListener является интерфейсом, и по умолчанию методы внутри интерфейса не имеют тела метода.

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

Невыполнение этого требования будет означать, что требуемый метод интерфейса не будет переопределен, поэтому ваш код не сможет скомпилироваться.

0 голосов
/ 08 февраля 2019

Поскольку один и тот же метод может использоваться для нескольких видов, вам необходимо знать, какой из них генерирует событие.

public void ara(View button) {
    switch (button.getId() {
        ...
    }
}
...