Урок 9. Обработчики событий на примере Button.
Урок 9. Обработчики событий на примере Button.
В этом уроке мы:
- научимся обрабатывать нажатие кнопки и узнаем, что такое обработчик
Click here to read this article!
- научимся обрабатывать нажатие кнопки и узнаем, что такое обработчик
Click here to read this article!
Последний раз редактировалось damager82 27 апр 2017, 14:32, всего редактировалось 17 раз.
Re: Урок 9. Обработчики событий на примере Button.
Доброго времени суток!
При создании OnClickListener жалуется на onClick - "The method onClick(View) of type new View.OnClickListener(){} must override a superclass method". При этом почему-то предлагает убрать "@Override", что бы это значило?
Или под суперклассом он имеет в виду MainActivity?
При создании OnClickListener жалуется на onClick - "The method onClick(View) of type new View.OnClickListener(){} must override a superclass method". При этом почему-то предлагает убрать "@Override", что бы это значило?
Или под суперклассом он имеет в виду MainActivity?
Re: Урок 9. Обработчики событий на примере Button.
Попробуй убрать. Должно заработать. Говорят, что это в новой Java'е так. А у автора 6 версия.
Re: Урок 9. Обработчики событий на примере Button.
Тут можно почитать об этом.
http://www.sql.ru/forum/actualthread.aspx?tid=496706
Действительно, дело в версии Java. Я использую шестую версию.
Я часто использую визард (CTRL+пробел) для написания методов, и он сам мне проставляет @Override. Но эта метка является только напоминанием программисту, чтобы он не забыл про этот метод, если изменится метод родительского класса.
В последних уроках я стараюсь удалять эту аннотацию
http://www.sql.ru/forum/actualthread.aspx?tid=496706
Действительно, дело в версии Java. Я использую шестую версию.
Я часто использую визард (CTRL+пробел) для написания методов, и он сам мне проставляет @Override. Но эта метка является только напоминанием программисту, чтобы он не забыл про этот метод, если изменится метод родительского класса.
В последних уроках я стараюсь удалять эту аннотацию

Re: Урок 9. Обработчики событий на примере Button.
Ну я так понял не должно там быть этой директивы по смыслу? Странно почему раньше допускалась.
Re: Урок 9. Обработчики событий на примере Button.
Описанный пример реализации берет свои истоки от Java. Для андроида есть более удобный способ: http://developer.alexanderklimov.ru/and ... droid3.php (прошу прощения за РВС). Второй описанный здесь способ реально удобнее, хотя и описан он достаточно кривовато.
Re: Урок 9. Обработчики событий на примере Button.
Выдает вот такую ошибку. Красным подчеркнуто обращение к 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
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.
А где у вас описана переменная mainEditText ?Sapfil писал(а): Cannot refer to a non-final variable mainEditText inside an inner class defined in a different method
Я пока не вникал в суть этой java заморочки, но кроме final, по-моему, можно решить проблему, если вынести переменную из метода в класс.
Re: Урок 9. Обработчики событий на примере Button.
Я тоже новичок в андроид разработке, поэтому могу ошибаться, но я думаю, что эта ошибка возникает из-за того,что в методе onCreate вы пишите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
EditText mainEditText = (EditText)findViewById(R.id.editText1)
а надо просто,
mainEditText = (EditText)findViewById(R.id.editText1)
и чтобы эта переменная была глобальной для всего класса, надо объявлять наверху
public class SomeClassAtivity extends Activity {
EditText mainEditText;
...
Re: Урок 9. Обработчики событий на примере Button.
Да, все так. А можно и final втыкнуть, если больше переприсваиваний не будет.Adil писал(а):и чтобы эта переменная была глобальной для всего класса, надо объявлять наверху
Re: Урок 9. Обработчики событий на примере Button.
ребята помогите пожалуйста. я начинающий в кодинге и поэтому не очень хорошо понимаю процесс написания. объясните что я сделал не так в своем коде ? постоянно ошибка (((
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);
}
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.
какая именно ошибка и где (какая строка подсвечена)?
похоже, у вас в строке
OnClickListener oclBtnOk = new OnClickListener()
нет точки с запятой, но оно бы вообще не скомпилилось.
похоже, у вас в строке
OnClickListener oclBtnOk = new OnClickListener()
нет точки с запятой, но оно бы вообще не скомпилилось.
Re: Урок 9. Обработчики событий на примере Button.
пожалуйста напишите мне весь исходной код программы. я просто не очень понял что после чего надо вставлять. спасибо.
Re: Урок 9. Обработчики событий на примере Button.
Все исправил. Только вот не понял вот эту строчку public void onClick(View v) { Что значит (View v) ?
Re: Урок 9. Обработчики событий на примере Button.
метод onClick вызывается, когда вы нажимаете на какой-либо виджет на активити (строка, кнопка, что угодно)
Этот метод вызывается с передачей ему параметра типа View (параметр имеет тип View, такой же как Integer или boolean к примеру) и именем "v". Т.е. при щелчке на кнопку А будет вызван метод onClick и ему в качестве параметра передадут ссылку на кнопку А, при щелчке на кнопку В тот же метод onClick, но в параметр уже пойдет кнопка B
Этот метод вызывается с передачей ему параметра типа View (параметр имеет тип View, такой же как Integer или boolean к примеру) и именем "v". Т.е. при щелчке на кнопку А будет вызван метод onClick и ему в качестве параметра передадут ссылку на кнопку А, при щелчке на кнопку В тот же метод onClick, но в параметр уже пойдет кнопка B
Re: Урок 9. Обработчики событий на примере Button.
OnClick отлавливает одиночное нажатие. А каким событием можно отловить "нажать и удерживать" как например на экранной клавиатуре, если держать не отпуская BackSapce стираются последовательно все символы. Или как в калькуляторе, одиночное нажатие стирает последний символ, если не отрывать палец, стирается сразу вся строка ?
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 9. Обработчики событий на примере Button.
OnLongClickListenerlics писал(а):А каким событием можно отловить "нажать и удерживать"...
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 9. Обработчики событий на примере Button.
Спасибо, то что надо.
-
- Сообщения: 18
- Зарегистрирован: 02 июл 2012, 03:16
Re: Урок 9. Обработчики событий на примере Button.
В MainActivity.java подчкркивает красным tvOut btnOk btnCancel. И выдает ошибку tvOut cannot be resolved to a variable. ЧТо это значит?


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