Google Android - это несложно • Просмотр темы - Урок 9. Обработчики событий на примере Button.

Google Android - это несложно

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 22 авг 2018, 04:13

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 403 ]  На страницу 1, 2, 3, 4, 5 ... 21  След.
Автор Сообщение
СообщениеДобавлено: 22 авг 2011, 03:00 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1400
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
В этом уроке мы:

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

Click here to read this article!

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Последний раз редактировалось damager82 27 апр 2017, 14:32, всего редактировалось 17 раз(а).

Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 08 янв 2012, 18:14 

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 08 янв 2012, 18:20 

Зарегистрирован: 08 янв 2012, 12:26
Сообщений: 10
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Попробуй убрать. Должно заработать. Говорят, что это в новой Java'е так. А у автора 6 версия.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 08 янв 2012, 18:39 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1400
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
Тут можно почитать об этом.
http://www.sql.ru/forum/actualthread.aspx?tid=496706

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

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

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

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 09 янв 2012, 15:20 

Зарегистрирован: 08 янв 2012, 18:07
Сообщений: 5
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Ну я так понял не должно там быть этой директивы по смыслу? Странно почему раньше допускалась.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 11 янв 2012, 16:27 

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 14 фев 2012, 16:04 

Зарегистрирован: 12 фев 2012, 18:58
Сообщений: 3
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Выдает вот такую ошибку. Красным подчеркнуто обращение к 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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 14 фев 2012, 17:09 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1400
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
Sapfil писал(а):
Cannot refer to a non-final variable mainEditText inside an inner class defined in a different method


А где у вас описана переменная mainEditText ?

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

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 18 апр 2012, 17:30 

Зарегистрирован: 18 апр 2012, 17:26
Сообщений: 4
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
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;
...


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 19 апр 2012, 09:32 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1400
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
Adil писал(а):
и чтобы эта переменная была глобальной для всего класса, надо объявлять наверху


Да, все так. А можно и final втыкнуть, если больше переприсваиваний не будет.

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 26 май 2012, 21:48 

Зарегистрирован: 26 май 2012, 21:45
Сообщений: 8
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
ребята помогите пожалуйста. я начинающий в кодинге и поэтому не очень хорошо понимаю процесс написания. объясните что я сделал не так в своем коде ? постоянно ошибка (((

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 27 май 2012, 00:40 
Аватар пользователя

Зарегистрирован: 13 янв 2012, 17:56
Сообщений: 219
Благодарил (а): 3 раз.
Поблагодарили: 6 раз.
какая именно ошибка и где (какая строка подсвечена)?
похоже, у вас в строке
OnClickListener oclBtnOk = new OnClickListener()
нет точки с запятой, но оно бы вообще не скомпилилось.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 27 май 2012, 11:38 

Зарегистрирован: 26 май 2012, 21:45
Сообщений: 8
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
пожалуйста напишите мне весь исходной код программы. я просто не очень понял что после чего надо вставлять. спасибо.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 27 май 2012, 11:46 

Зарегистрирован: 26 май 2012, 21:45
Сообщений: 8
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Все исправил. Только вот не понял вот эту строчку public void onClick(View v) { Что значит (View v) ?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 27 май 2012, 19:28 
Аватар пользователя

Зарегистрирован: 13 янв 2012, 17:56
Сообщений: 219
Благодарил (а): 3 раз.
Поблагодарили: 6 раз.
метод onClick вызывается, когда вы нажимаете на какой-либо виджет на активити (строка, кнопка, что угодно)
Этот метод вызывается с передачей ему параметра типа View (параметр имеет тип View, такой же как Integer или boolean к примеру) и именем "v". Т.е. при щелчке на кнопку А будет вызван метод onClick и ему в качестве параметра передадут ссылку на кнопку А, при щелчке на кнопку В тот же метод onClick, но в параметр уже пойдет кнопка B


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 02 июл 2012, 17:44 

Зарегистрирован: 03 фев 2012, 19:11
Сообщений: 10
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
OnClick отлавливает одиночное нажатие. А каким событием можно отловить "нажать и удерживать" как например на экранной клавиатуре, если держать не отпуская BackSapce стираются последовательно все символы. Или как в калькуляторе, одиночное нажатие стирает последний символ, если не отрывать палец, стирается сразу вся строка ?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 02 июл 2012, 19:24 
Аватар пользователя

Зарегистрирован: 17 фев 2012, 21:23
Сообщений: 1339
Откуда: Мордор
Благодарил (а): 16 раз.
Поблагодарили: 161 раз.
lics писал(а):
А каким событием можно отловить "нажать и удерживать"...
OnLongClickListener

_________________
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 04 июл 2012, 12:11 

Зарегистрирован: 03 фев 2012, 19:11
Сообщений: 10
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Спасибо, то что надо.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 06 июл 2012, 13:26 

Зарегистрирован: 02 июл 2012, 03:16
Сообщений: 18
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
В MainActivity.java подчкркивает красным tvOut btnOk btnCancel. И выдает ошибку tvOut cannot be resolved to a variable. ЧТо это значит?

Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 06 июл 2012, 14:12 

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

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


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 403 ]  На страницу 1, 2, 3, 4, 5 ... 21  След.

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB