Урок 10. Оптимизируем реализацию обработчиков.
Урок 10. Оптимизируем реализацию обработчиков.
В этом уроке мы:
- научимся использовать один обработчик для нескольких View-элементов
- научим Activity выступать в качестве обработчика
Click here to read this article!
- научимся использовать один обработчик для нескольких View-элементов
- научим Activity выступать в качестве обработчика
Click here to read this article!
Последний раз редактировалось damager82 20 июн 2017, 14:56, всего редактировалось 16 раз.
Re: Урок 10. Оптимизируем реализацию обработчиков.
Здравствуйте. А как лучше сделать обработчик: как в этом уроке или через android:onClick="butHello_Click" как в уроке Климова?
Re: Урок 10. Оптимизируем реализацию обработчиков.
Добрый день. Работать будет и так и так. Но через onClick проще, факт )Tkas писал(а):Здравствуйте. А как лучше сделать обработчик: как в этом уроке или через android:onClick="butHello_Click" как в уроке Климова?
Просто, когда я этот урок делал, я еще не знал про этот метод. Все руки не доходят добавить его в урок.
Re: Урок 10. Оптимизируем реализацию обработчиков.
Да, так действительно проще) А насчет затрат памяти получается, что оба метода одинаковы?damager82 писал(а): Добрый день. Работать будет и так и так. Но через onClick проще, факт )
Просто, когда я этот урок делал, я еще не знал про этот метод. Все руки не доходят добавить его в урок.
Re: Урок 10. Оптимизируем реализацию обработчиков.
Да, все равно внутри создается обработчик OnClickListener и дергает метод из атрибута onClick.Tkas писал(а):А насчет затрат памяти получается, что оба метода одинаковы?
Re: Урок 10. Оптимизируем реализацию обработчиков.
А я считаю, что этот метод надо использовать крайне редко. Пусть лучше обработка событий будет в одном месте, чем разбросать их по вьюшкам.Tkas писал(а):Здравствуйте. А как лучше сделать обработчик: как в этом уроке или через android:onClick="butHello_Click" как в уроке Климова?
Это также как и в javascript, плохой тон каждому html тегу приписывать обработчик.
Re: Урок 10. Оптимизируем реализацию обработчиков.
Объясните пожалуйста а есть ли разница каким из трех способов (первый из прошлого урока) писать код ? Или можно пользоваться любым ?
Re: Урок 10. Оптимизируем реализацию обработчиков.
Пользоваться можно любым, каким сочтете нужным. Проще указывать метод обработки клика в layout. Правильнее, на мой взгляд, внутри кода, т.к. больший контроль
Re: Урок 10. Оптимизируем реализацию обработчиков.
Спасибо. Так как пока только начал изучать все это дело, буду пользоваться первым. Он мне более понятен и проще запоминать команды.
Re: Урок 10. Оптимизируем реализацию обработчиков.
Рекомендую указать, что последний метод onClick="onclick" - предпочтительней. Так корректней, по умолчанию, с точки зрения общепринятых императивов и "конвенций".
-
- Сообщения: 18
- Зарегистрирован: 02 июл 2012, 03:16
Re: Урок 10. Оптимизируем реализацию обработчиков.
У меня вопрос немного не по теме урока. Вот есть такой код внутри урока
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 а остальное по ходу изучится?
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 а остальное по ходу изучится?
Re: Урок 10. Оптимизируем реализацию обработчиков.
Если вы о Java, то определенно надо изучить хотя бы азы. Без этого дальше будет очень сложно материалы воспринимать.xolostyak_by писал(а):С чего надо начать что бы подобные задачи уменить решать? Или не париться изучать Android а остальное по ходу изучится?
Re: Урок 10. Оптимизируем реализацию обработчиков.
В нашем случае мы будем присваивать один обработчик ОБОИМ кнопкам, а внутри обработчика надо будет определять, какая именно кнопка была нажата.
Обеим же, или я не прав?
Обеим же, или я не прав?
Re: Урок 10. Оптимизируем реализацию обработчиков.
Правы, спасибо!baxxabit писал(а):В нашем случае мы будем присваивать один обработчик ОБОИМ кнопкам, а внутри обработчика надо будет определять, какая именно кнопка была нажата.
Обеим же, или я не прав?
Еще и обЕих, а не обОих )) Пофиксил
Re: Урок 10. Оптимизируем реализацию обработчиков.
а покажите как выглядит код MainActivity.java на примере 2х кнопок, с применением метода onClick .
у меня вышел вот такой:
это activity_main.xml из layout'a:
Мне кажется что можно как-то оптимизировать вот эту часть:
используя условные выражения, только не могу что-то сообразить как именно это будет выглядеть, подскажите.
у меня вышел вот такой:
Код: Выделить всё
package ru.example.l10_listener;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
// private Button btnOk;
// private Button btnCancel;
private TextView tvOut;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// btnOk = (Button) findViewById(R.id.btnOk);
// btnCancel = (Button) findViewById(R.id.btnCancel);
tvOut = (TextView) findViewById(R.id.tvOut);
}
public void btnOk_Click(View v) {
tvOut.setText("Нажата кнопку Ok");
}
public void btnCancel_Click(View v) {
tvOut.setText("Нажата кнопка Cancel");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
Код: Выделить всё
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_margin="30dp">
<TextView
android:layout_width="wrap_content"
android:text="TextView"
android:layout_height="wrap_content"
android:id="@+id/tvOut"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="50dp">
</TextView>
<Button
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:id="@+id/btnOk"
android:text="OK"
android:onClick="btnOk_Click"
android:layout_width="100dp">
</Button>
<Button
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:id="@+id/btnCancel"
android:text="Cancel"
android:onClick="btnCancel_Click"
android:layout_width="100dp">
</Button>
</LinearLayout>
</RelativeLayout>
Код: Выделить всё
public void btnOk_Click(View v) {
tvOut.setText("Нажата кнопку Ok");
}
public void btnCancel_Click(View v) {
tvOut.setText("Нажата кнопка Cancel");
}
Re: Урок 10. Оптимизируем реализацию обработчиков.
Для обоих кнопок прописываете один метод в атрибуте android:onClick. А в его реализации в Activity проверяете v.getId() на соответствие ID кнопок.Daniil писал(а):Мне кажется что можно как-то оптимизировать вот эту часть:используя условные выражения, только не могу что-то сообразить как именно это будет выглядеть, подскажите.Код: Выделить всё
public void btnOk_Click(View v) { tvOut.setText("Нажата кнопку Ok"); } public void btnCancel_Click(View v) { tvOut.setText("Нажата кнопка Cancel"); }
layout:
Код: Выделить всё
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onBtnClick"
android:text="Button1" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onBtnClick"
android:text="Button2" />
Код: Выделить всё
public void onBtnClick(View v) {
switch (v.getId()) {
case R.id.button1:
Log.d("qwe", "button1");
break;
case R.id.button2:
Log.d("qwe", "button2");
break;
}
}
Re: Урок 10. Оптимизируем реализацию обработчиков.
Понял, спасибо, не сообразил что "onBtnClick" -это название метода, в android:onClick="onBtnClick"
Re: Урок 10. Оптимизируем реализацию обработчиков.
Если использовать второй метод, где используется метод объекта Activity то можно обрабатывать в методе onClick не только кнопки, но и другие компоненты? По-моему самый удобный и универсальный способ
-
- Сообщения: 21
- Зарегистрирован: 30 янв 2012, 21:15
Re: Урок 10. Оптимизируем реализацию обработчиков.
ну так ведь можно и в другие компоненты прописывать обработчик onClick, а в методе обрабатывать через swich.samarjan писал(а):Если использовать второй метод, где используется метод объекта Activity то можно обрабатывать в методе onClick не только кнопки, но и другие компоненты? По-моему самый удобный и универсальный способ
Re: Урок 10. Оптимизируем реализацию обработчиков.
Тогда получается эмулятор сначала расценивает клик не как по кнопке а как по самому окну Activity а там дальше передает конкретнее что было нажато, верно?
Jack_killer, все равно мне кажется это удобнее и правильнее
Jack_killer, все равно мне кажется это удобнее и правильнее