Урок 9. Обработчики событий на примере Button.

Обсуждение уроков
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Урок 9. Обработчики событий на примере Button.

Сообщение damager82 » 22 авг 2011, 03:00

В этом уроке мы:

- научимся обрабатывать нажатие кнопки и узнаем, что такое обработчик

Click here to read this article!
Последний раз редактировалось damager82 27 апр 2017, 14:32, всего редактировалось 17 раз.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Kirlik
Сообщения: 5
Зарегистрирован: 08 янв 2012, 18:07

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Kirlik » 08 янв 2012, 18:14

Доброго времени суток!
При создании OnClickListener жалуется на onClick - "The method onClick(View) of type new View.OnClickListener(){} must override a superclass method". При этом почему-то предлагает убрать "@Override", что бы это значило?
Или под суперклассом он имеет в виду MainActivity?

AiVeR
Сообщения: 10
Зарегистрирован: 08 янв 2012, 12:26

Re: Урок 9. Обработчики событий на примере Button.

Сообщение AiVeR » 08 янв 2012, 18:20

Попробуй убрать. Должно заработать. Говорят, что это в новой Java'е так. А у автора 6 версия.

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 9. Обработчики событий на примере Button.

Сообщение damager82 » 08 янв 2012, 18:39

Тут можно почитать об этом.
http://www.sql.ru/forum/actualthread.aspx?tid=496706

Действительно, дело в версии Java. Я использую шестую версию.

Я часто использую визард (CTRL+пробел) для написания методов, и он сам мне проставляет @Override. Но эта метка является только напоминанием программисту, чтобы он не забыл про этот метод, если изменится метод родительского класса.

В последних уроках я стараюсь удалять эту аннотацию :)
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Kirlik
Сообщения: 5
Зарегистрирован: 08 янв 2012, 18:07

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Kirlik » 09 янв 2012, 15:20

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

Qde5nik
Сообщения: 1
Зарегистрирован: 11 янв 2012, 16:23

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Qde5nik » 11 янв 2012, 16:27

Описанный пример реализации берет свои истоки от Java. Для андроида есть более удобный способ: http://developer.alexanderklimov.ru/and ... droid3.php (прошу прощения за РВС). Второй описанный здесь способ реально удобнее, хотя и описан он достаточно кривовато.

Sapfil
Сообщения: 3
Зарегистрирован: 12 фев 2012, 18:58

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Sapfil » 14 фев 2012, 16:04

Выдает вот такую ошибку. Красным подчеркнуто обращение к EditText-у из метода ClickListener.

Cannot refer to a non-final variable mainEditText inside an inner class defined in a different method

Предлагает поставить final перед этой строчкой:

EditText mainEditText = (EditText)findViewById(R.id.editText1);

Ставлю final и все работает. Но мне интересно что это за final и зачем он нужен. Связано ли это с тем что я использовал editText вместо textView

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 9. Обработчики событий на примере Button.

Сообщение damager82 » 14 фев 2012, 17:09

Sapfil писал(а): Cannot refer to a non-final variable mainEditText inside an inner class defined in a different method
А где у вас описана переменная mainEditText ?

Я пока не вникал в суть этой java заморочки, но кроме final, по-моему, можно решить проблему, если вынести переменную из метода в класс.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Adil
Сообщения: 4
Зарегистрирован: 18 апр 2012, 17:26

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Adil » 18 апр 2012, 17:30

Sapfil писал(а):Выдает вот такую ошибку. Красным подчеркнуто обращение к EditText-у из метода ClickListener.

Cannot refer to a non-final variable mainEditText inside an inner class defined in a different method

Предлагает поставить final перед этой строчкой:

EditText mainEditText = (EditText)findViewById(R.id.editText1);

Ставлю final и все работает. Но мне интересно что это за final и зачем он нужен. Связано ли это с тем что я использовал editText вместо textView
Я тоже новичок в андроид разработке, поэтому могу ошибаться, но я думаю, что эта ошибка возникает из-за того,что в методе onCreate вы пишите
EditText mainEditText = (EditText)findViewById(R.id.editText1)
а надо просто,
mainEditText = (EditText)findViewById(R.id.editText1)
и чтобы эта переменная была глобальной для всего класса, надо объявлять наверху
public class SomeClassAtivity extends Activity {
EditText mainEditText;
...

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 9. Обработчики событий на примере Button.

Сообщение damager82 » 19 апр 2012, 09:32

Adil писал(а):и чтобы эта переменная была глобальной для всего класса, надо объявлять наверху
Да, все так. А можно и final втыкнуть, если больше переприсваиваний не будет.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

mexo
Сообщения: 8
Зарегистрирован: 26 май 2012, 21:45

Re: Урок 9. Обработчики событий на примере Button.

Сообщение mexo » 26 май 2012, 21:48

ребята помогите пожалуйста. я начинающий в кодинге и поэтому не очень хорошо понимаю процесс написания. объясните что я сделал не так в своем коде ? постоянно ошибка (((

public class MainActivity extends Activity {

TextView tvOut;
Button btnOk;
Button btnCancel;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

// найдем View-элементы
tvOut = (TextView) findViewById(R.id.tvOut);
btnOk = (Button) findViewById(R.id.btnOk);
btnCancel = (Button) findViewById(R.id.btnCancel);

// создаем обработчик нажатия

OnClickListener oclBtnOk = new OnClickListener()
OnClickListener oclBtnCancel = new OnClickListener()

{
public void onClick(View v) {
// Меняем текст в TextView (tvOut)
tvOut.setText("Нажата кнопка ОК");
tvOut.setText("text");
}
};

// присвоим обработчик кнопке OK (btnOk)
btnOk.setOnClickListener(oclBtnOk);
btnCancel.setOnClickListener(oclBtnCancel);
}

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

Re: Урок 9. Обработчики событий на примере Button.

Сообщение andev » 27 май 2012, 00:40

какая именно ошибка и где (какая строка подсвечена)?
похоже, у вас в строке
OnClickListener oclBtnOk = new OnClickListener()
нет точки с запятой, но оно бы вообще не скомпилилось.

mexo
Сообщения: 8
Зарегистрирован: 26 май 2012, 21:45

Re: Урок 9. Обработчики событий на примере Button.

Сообщение mexo » 27 май 2012, 11:38

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

mexo
Сообщения: 8
Зарегистрирован: 26 май 2012, 21:45

Re: Урок 9. Обработчики событий на примере Button.

Сообщение mexo » 27 май 2012, 11:46

Все исправил. Только вот не понял вот эту строчку public void onClick(View v) { Что значит (View v) ?

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

Re: Урок 9. Обработчики событий на примере Button.

Сообщение andev » 27 май 2012, 19:28

метод onClick вызывается, когда вы нажимаете на какой-либо виджет на активити (строка, кнопка, что угодно)
Этот метод вызывается с передачей ему параметра типа View (параметр имеет тип View, такой же как Integer или boolean к примеру) и именем "v". Т.е. при щелчке на кнопку А будет вызван метод onClick и ему в качестве параметра передадут ссылку на кнопку А, при щелчке на кнопку В тот же метод onClick, но в параметр уже пойдет кнопка B

lics
Сообщения: 10
Зарегистрирован: 03 фев 2012, 19:11

Re: Урок 9. Обработчики событий на примере Button.

Сообщение lics » 02 июл 2012, 17:44

OnClick отлавливает одиночное нажатие. А каким событием можно отловить "нажать и удерживать" как например на экранной клавиатуре, если держать не отпуская BackSapce стираются последовательно все символы. Или как в калькуляторе, одиночное нажатие стирает последний символ, если не отрывать палец, стирается сразу вся строка ?

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 9. Обработчики событий на примере Button.

Сообщение KamiSempai » 02 июл 2012, 19:24

lics писал(а):А каким событием можно отловить "нажать и удерживать"...
OnLongClickListener
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

lics
Сообщения: 10
Зарегистрирован: 03 фев 2012, 19:11

Re: Урок 9. Обработчики событий на примере Button.

Сообщение lics » 04 июл 2012, 12:11

Спасибо, то что надо.

xolostyak_by
Сообщения: 18
Зарегистрирован: 02 июл 2012, 03:16

Re: Урок 9. Обработчики событий на примере Button.

Сообщение xolostyak_by » 06 июл 2012, 13:26

В MainActivity.java подчкркивает красным tvOut btnOk btnCancel. И выдает ошибку tvOut cannot be resolved to a variable. ЧТо это значит?

Изображение

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Урок 9. Обработчики событий на примере Button.

Сообщение AndreyI » 06 июл 2012, 14:12

Они у вас не объявлены ни как поля класса, ни как локальные переменные. Вы можете вручную их объявить, но лучше попросить это сделать Эклипс.
Учитесь рационально использовать среду программирования, эти навыки вам в будущем очень помогут:
Наведите курсор мыши на подчеркнутые элементы и Эклипс предложит вам варианты решения проблемы:
Create local veriable 'tvOut' - создаст локальную переменную (просто допишет тип переменной)-Переменную можно будет использовать только в пределах метода (в данном случае onCreate).
Create field 'tvOut' - создаст поле класса - воспользуйтесь этим, если вам нужно будет использовать переменную в пределах всего класса (MainActivity).
Create parameter 'tvOut' - создаст параметр метода (допишет в метод onCreate еще один параметр) - это вам точно не нужно, изменять сигнатуру перегружаемого метода нельзя.

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

Ответить