Страница 1 из 21

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

Добавлено: 22 авг 2011, 03:00
damager82
В этом уроке мы:

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

Click here to read this article!

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

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

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

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

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

Добавлено: 08 янв 2012, 18:39
damager82
Тут можно почитать об этом.
http://www.sql.ru/forum/actualthread.aspx?tid=496706

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

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

В последних уроках я стараюсь удалять эту аннотацию :)

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

Добавлено: 09 янв 2012, 15:20
Kirlik
Ну я так понял не должно там быть этой директивы по смыслу? Странно почему раньше допускалась.

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

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

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

Добавлено: 14 фев 2012, 16:04
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

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

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

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

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

Добавлено: 18 апр 2012, 17:30
Adil
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;
...

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

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

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

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

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);
}

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

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

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

Добавлено: 27 май 2012, 11:38
mexo
пожалуйста напишите мне весь исходной код программы. я просто не очень понял что после чего надо вставлять. спасибо.

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

Добавлено: 27 май 2012, 11:46
mexo
Все исправил. Только вот не понял вот эту строчку public void onClick(View v) { Что значит (View v) ?

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

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

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

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

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

Добавлено: 02 июл 2012, 19:24
KamiSempai
lics писал(а):А каким событием можно отловить "нажать и удерживать"...
OnLongClickListener

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

Добавлено: 04 июл 2012, 12:11
lics
Спасибо, то что надо.

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

Добавлено: 06 июл 2012, 13:26
xolostyak_by
В MainActivity.java подчкркивает красным tvOut btnOk btnCancel. И выдает ошибку tvOut cannot be resolved to a variable. ЧТо это значит?

Изображение

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

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

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