Как передать аргумент функции onClick кнопки? (Android)

Description:

У меня есть функция onClick под названием sum(View v). Как передать аргументы указанной функции? Я пробовал sum(View v,int a,int b), но как только я это сделаю, компилятор выдает ошибку как "Corresponding method handler 'public void sum(android.view.View)' not found". Во-первых, скажите мне, можно ли передать аргумент функции по щелчку так же, как я, или есть другой способ сделать то же самое.

desired java code:

     public void sum(view v,int a,int b){
        int c;
        c =a+b;
}

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

0
0
193
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

How can I pass the arguments to the mentioned function?

Как правило, нет. Вы можете использовать лямбда-выражения привязки данных в макете, но это относительно сложная тема.

Вместо этого вы могли:

  • Переименуйте свой метод sum(View v) в onSumClicked(View v) и настройте, где бы вы ни использовали этот метод, чтобы он соответствовал
  • Пусть onSumClicked(View v) позвонит на ваш sum(view v,int a,int b) с желаемыми значениями.

немного запутался. не могли бы вы написать код для того, что вы сказали выше? Я новичок в Android.

Aniket Jadhav 27.10.2018 19:44
Ответ принят как подходящий

Если вы жестко запрограммировали в xml атрибут onClick кнопки (скажем, это кнопка), например:

android:onClick = "sum"

тогда метод суммы должен иметь такую ​​подпись:

public void sum(View v)

никакие другие параметры не разрешены для sum(), только для View v (даже если приложение будет компилироваться, но когда вы нажмете кнопку, приложение выйдет из строя).
Если вы хотите использовать эти 2 целочисленные переменные внутри sum(), вам необходимо объявить их на уровне класса.
Редактировать Итак, объявите 2 переменные в своем классе активности

int a = 0;
int b = 0;

вы можете установить их значения в любом месте этого класса, и когда вы нажмете кнопку, внутри sum() вы сможете получить к ним доступ.

А что, если мне нужно изменить значение переменной для каждого вызова функции в разных местах. Объявление переменной на уровне класса (или глобально) делает переменную постоянной для каждого вызова.

Aniket Jadhav 28.10.2018 10:21
Объявление переменной на уровне класса (или глобально) делает переменную постоянной для каждого вызова нет, это не так! Это переменная, а не окончательный.
forpas 28.10.2018 10:24

предположим, я объявил переменную a = 0 & b = 0. Теперь я хочу вызвать функцию sum (View v) в трех разных местах с разными значениями a и b. Как это сделать?

Aniket Jadhav 28.10.2018 10:33

Вы не звоните sum(), он срабатывает при нажатии на кнопку, разве это не повод для вашего вопроса? Когда вы нажимаете кнопку, внутри sum() вы можете поместить код для использования a и b. Их значения могли быть изменены где угодно в классе.

forpas 28.10.2018 10:37

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

Aniket Jadhav 28.10.2018 10:41

В своем вопросе вы пишете У меня есть функция onClick под названием sum (View v), это означает, что вы хотите, чтобы эта функция выполнялась каждый раз, когда вы нажимаете кнопку, поэтому я полагаю, что в xml вы установили этот атрибут для кнопки: android:onClick = "sum". Разве это не так? Итак, sum() будет выполняться когда вы нажимаете кнопку. Теперь внутри корпуса sum() вы можете делать все, что хотите, с помощью a и b, например, показывать тост: Toast.makeText(this, "the value of a is = " + a, Toast.LENGTH_SHORT).show();

forpas 28.10.2018 10:49

Все, что вы пишете выше, правильно. Теперь, если я вызываю эту функцию sum () в трех разных местах, значение «a» будет одинаковым в тосте для каждого вызова, потому что после того, как вы объявите значение «a», оно останется таким же во всех трех местах. Даже если вы измените «а», он изменится для всех трех мест. И мы не можем изменить значение «а» во время звонка. Потому что аргументы мы не передали. Извините за беспокойство.

Aniket Jadhav 28.10.2018 10:59
Вы не называете сумму () вызывается системой при нажатии кнопки. Если вы хотите изменить значение a, вы жестяная банка сделаете это в любом месте вашего класса (в том числе внутри sum()), поэтому когда вы нажмете кнопку, и вы сможете управлять новым значением a внутри sum().
forpas 28.10.2018 11:04

Ох, извините .... Как я могу совершить такую ​​большую ошибку. Мы не можем вызвать функцию OnClick, потому что она будет вызывать каждый раз, когда я нажимаю кнопку. Так что тут не о спорах.

Aniket Jadhav 28.10.2018 12:02

@AniketJadhav именно так

forpas 28.10.2018 12:03

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