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

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 19 июн 2018, 20:53

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




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

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

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

- научимся использовать один обработчик для нескольких View-элементов
- научим Activity выступать в качестве обработчика




Click here to read this article!

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


Последний раз редактировалось damager82 20 июн 2017, 14:56, всего редактировалось 16 раз(а).

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

Зарегистрирован: 24 янв 2012, 16:55
Сообщений: 5
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Здравствуйте. А как лучше сделать обработчик: как в этом уроке или через android:onClick="butHello_Click" как в уроке Климова?


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

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1394
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
Tkas писал(а):
Здравствуйте. А как лучше сделать обработчик: как в этом уроке или через android:onClick="butHello_Click" как в уроке Климова?

Добрый день. Работать будет и так и так. Но через onClick проще, факт )
Просто, когда я этот урок делал, я еще не знал про этот метод. Все руки не доходят добавить его в урок.

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


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

Зарегистрирован: 24 янв 2012, 16:55
Сообщений: 5
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
damager82 писал(а):
Добрый день. Работать будет и так и так. Но через onClick проще, факт )
Просто, когда я этот урок делал, я еще не знал про этот метод. Все руки не доходят добавить его в урок.

Да, так действительно проще) А насчет затрат памяти получается, что оба метода одинаковы?


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

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

Да, все равно внутри создается обработчик OnClickListener и дергает метод из атрибута onClick.

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


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

Зарегистрирован: 18 апр 2012, 17:26
Сообщений: 4
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Tkas писал(а):
Здравствуйте. А как лучше сделать обработчик: как в этом уроке или через android:onClick="butHello_Click" как в уроке Климова?


А я считаю, что этот метод надо использовать крайне редко. Пусть лучше обработка событий будет в одном месте, чем разбросать их по вьюшкам.
Это также как и в javascript, плохой тон каждому html тегу приписывать обработчик.


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

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


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

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


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

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


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

Зарегистрирован: 21 июн 2012, 15:34
Сообщений: 5
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Рекомендую указать, что последний метод onClick="onclick" - предпочтительней. Так корректней, по умолчанию, с точки зрения общепринятых императивов и "конвенций".


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

Зарегистрирован: 02 июл 2012, 03:16
Сообщений: 18
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
У меня вопрос немного не по теме урока. Вот есть такой код внутри урока

public void onClick(View v) {
// по id определеяем кнопку, вызвавшую этот обработчик
switch (v.getId()) {
case R.id.btnOk:
// кнопка ОК
tvOut.setText("Нажата кнопка ОК");
break;
case R.id.btnCancel:
// кнопка Cancel
tvOut.setText("Нажата кнопка Cancel");
break;
}
}


С чего надо начать что бы подобные задачи уменить решать? Или не париться изучать Android а остальное по ходу изучится?


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

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1394
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
xolostyak_by писал(а):
С чего надо начать что бы подобные задачи уменить решать? Или не париться изучать Android а остальное по ходу изучится?

Если вы о Java, то определенно надо изучить хотя бы азы. Без этого дальше будет очень сложно материалы воспринимать.

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


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

Зарегистрирован: 11 июл 2012, 16:52
Сообщений: 4
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
В нашем случае мы будем присваивать один обработчик ОБОИМ кнопкам, а внутри обработчика надо будет определять, какая именно кнопка была нажата.
Обеим же, или я не прав?


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

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1394
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
baxxabit писал(а):
В нашем случае мы будем присваивать один обработчик ОБОИМ кнопкам, а внутри обработчика надо будет определять, какая именно кнопка была нажата.
Обеим же, или я не прав?

Правы, спасибо!
Еще и обЕих, а не обОих )) Пофиксил

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


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

Зарегистрирован: 15 июл 2012, 13:01
Сообщений: 25
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
а покажите как выглядит код MainActivity.java на примере 2х кнопок, с применением метода onClick .

у меня вышел вот такой:

Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. package ru.example.l10_listener;
  2.  
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.view.Menu;
  6. import android.view.View;
  7. import android.widget.TextView;
  8.  
  9. public class MainActivity extends Activity {
  10. //      private Button btnOk;
  11. //      private Button btnCancel;
  12.         private TextView tvOut;
  13.        
  14.     @Override
  15.     public void onCreate(Bundle savedInstanceState) {
  16.         super.onCreate(savedInstanceState);
  17.         setContentView(R.layout.activity_main);
  18.        
  19.      //   btnOk = (Button) findViewById(R.id.btnOk);
  20.     //    btnCancel = (Button) findViewById(R.id.btnCancel);
  21.         tvOut = (TextView) findViewById(R.id.tvOut);
  22.     }
  23.  
  24.     public void btnOk_Click(View v)     {      
  25.         tvOut.setText("Нажата кнопку Ok");
  26.     }
  27.    
  28.     public void btnCancel_Click(View v) {
  29.         tvOut.setText("Нажата кнопка Cancel");
  30.     }
  31.    
  32.    
  33.     @Override
  34.     public boolean onCreateOptionsMenu(Menu menu) {
  35.         getMenuInflater().inflate(R.menu.activity_main, menu);
  36.         return true;
  37.     }
  38.  
  39.    
  40. }
  41.  


это activity_main.xml из layout'a:

Код: [ Загрузить ] [ Скрыть ]
Using XML Syntax Highlighting
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.    xmlns:tools="http://schemas.android.com/tools"
  3.    android:layout_width="match_parent"
  4.    android:layout_height="match_parent" >
  5.  
  6.     <LinearLayout
  7. android:id="@+id/linearLayout1"
  8. android:layout_height="match_parent"
  9. android:orientation="vertical"
  10. android:layout_width="match_parent"
  11. android:layout_margin="30dp">
  12. <TextView
  13. android:layout_width="wrap_content"
  14. android:text="TextView"
  15. android:layout_height="wrap_content"
  16. android:id="@+id/tvOut"
  17. android:layout_gravity="center_horizontal"
  18. android:layout_marginBottom="50dp">
  19. </TextView>
  20. <Button
  21. android:layout_height="wrap_content"
  22. android:layout_gravity="center_horizontal"
  23. android:id="@+id/btnOk"
  24. android:text="OK"
  25. android:onClick="btnOk_Click"
  26. android:layout_width="100dp">
  27. </Button>
  28. <Button
  29. android:layout_height="wrap_content"
  30. android:layout_gravity="center_horizontal"
  31. android:id="@+id/btnCancel"
  32. android:text="Cancel"
  33. android:onClick="btnCancel_Click"
  34. android:layout_width="100dp">
  35. </Button>
  36. </LinearLayout>
  37.  
  38. </RelativeLayout>


Мне кажется что можно как-то оптимизировать вот эту часть:
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1.   public void btnOk_Click(View v)       {      
  2.         tvOut.setText("Нажата кнопку Ok");
  3.     }
  4.    
  5.     public void btnCancel_Click(View v) {
  6.         tvOut.setText("Нажата кнопка Cancel");
  7.     }
  8.  

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


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

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1394
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
Daniil писал(а):
Мне кажется что можно как-то оптимизировать вот эту часть:
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1.   public void btnOk_Click(View v)       {      
  2.         tvOut.setText("Нажата кнопку Ok");
  3.     }
  4.    
  5.     public void btnCancel_Click(View v) {
  6.         tvOut.setText("Нажата кнопка Cancel");
  7.     }
  8.  

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

Для обоих кнопок прописываете один метод в атрибуте android:onClick. А в его реализации в Activity проверяете v.getId() на соответствие ID кнопок.

layout:
Код: [ Загрузить ] [ Скрыть ]
Using XML Syntax Highlighting
  1.         <Button
  2.            android:id="@+id/button1"
  3.            android:layout_width="wrap_content"
  4.            android:layout_height="wrap_content"
  5.             android:onClick="onBtnClick"
  6.            android:text="Button1" />
  7.  
  8.         <Button
  9.            android:id="@+id/button2"
  10.            android:layout_width="wrap_content"
  11.            android:layout_height="wrap_content"
  12.            android:onClick="onBtnClick"
  13.            android:text="Button2" />


Activity:
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1.         public void onBtnClick(View v) {
  2.                 switch (v.getId()) {
  3.                 case R.id.button1:
  4.                         Log.d("qwe", "button1");
  5.                         break;
  6.                 case R.id.button2:
  7.                         Log.d("qwe", "button2");
  8.                         break;                 
  9.                 }
  10.         }

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


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

Зарегистрирован: 15 июл 2012, 13:01
Сообщений: 25
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Понял, спасибо, не сообразил что "onBtnClick" -это название метода, в android:onClick="onBtnClick"


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

Зарегистрирован: 01 авг 2012, 13:56
Сообщений: 27
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Если использовать второй метод, где используется метод объекта Activity то можно обрабатывать в методе onClick не только кнопки, но и другие компоненты? По-моему самый удобный и универсальный способ


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

Зарегистрирован: 30 янв 2012, 21:15
Сообщений: 21
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
samarjan писал(а):
Если использовать второй метод, где используется метод объекта Activity то можно обрабатывать в методе onClick не только кнопки, но и другие компоненты? По-моему самый удобный и универсальный способ

ну так ведь можно и в другие компоненты прописывать обработчик onClick, а в методе обрабатывать через swich.


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

Зарегистрирован: 01 авг 2012, 13:56
Сообщений: 27
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Тогда получается эмулятор сначала расценивает клик не как по кнопке а как по самому окну Activity а там дальше передает конкретнее что было нажато, верно?
Jack_killer, все равно мне кажется это удобнее и правильнее


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

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


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

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