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

Урок 10. Оптимизируем реализацию обработчиков.

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

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


Click here to read this article!

Re: Урок 10. Оптимизируем реализацию обработчиков.

Добавлено: 24 янв 2012, 17:09
Tkas
Здравствуйте. А как лучше сделать обработчик: как в этом уроке или через android:onClick="butHello_Click" как в уроке Климова?

Re: Урок 10. Оптимизируем реализацию обработчиков.

Добавлено: 25 янв 2012, 09:28
damager82
Tkas писал(а):Здравствуйте. А как лучше сделать обработчик: как в этом уроке или через android:onClick="butHello_Click" как в уроке Климова?
Добрый день. Работать будет и так и так. Но через onClick проще, факт )
Просто, когда я этот урок делал, я еще не знал про этот метод. Все руки не доходят добавить его в урок.

Re: Урок 10. Оптимизируем реализацию обработчиков.

Добавлено: 25 янв 2012, 12:05
Tkas
damager82 писал(а): Добрый день. Работать будет и так и так. Но через onClick проще, факт )
Просто, когда я этот урок делал, я еще не знал про этот метод. Все руки не доходят добавить его в урок.
Да, так действительно проще) А насчет затрат памяти получается, что оба метода одинаковы?

Re: Урок 10. Оптимизируем реализацию обработчиков.

Добавлено: 26 янв 2012, 14:28
damager82
Tkas писал(а):А насчет затрат памяти получается, что оба метода одинаковы?
Да, все равно внутри создается обработчик OnClickListener и дергает метод из атрибута onClick.

Re: Урок 10. Оптимизируем реализацию обработчиков.

Добавлено: 18 апр 2012, 17:46
Adil
Tkas писал(а):Здравствуйте. А как лучше сделать обработчик: как в этом уроке или через android:onClick="butHello_Click" как в уроке Климова?
А я считаю, что этот метод надо использовать крайне редко. Пусть лучше обработка событий будет в одном месте, чем разбросать их по вьюшкам.
Это также как и в javascript, плохой тон каждому html тегу приписывать обработчик.

Re: Урок 10. Оптимизируем реализацию обработчиков.

Добавлено: 27 май 2012, 19:14
mexo
Объясните пожалуйста а есть ли разница каким из трех способов (первый из прошлого урока) писать код ? Или можно пользоваться любым ?

Re: Урок 10. Оптимизируем реализацию обработчиков.

Добавлено: 27 май 2012, 21:43
andev
Пользоваться можно любым, каким сочтете нужным. Проще указывать метод обработки клика в layout. Правильнее, на мой взгляд, внутри кода, т.к. больший контроль

Re: Урок 10. Оптимизируем реализацию обработчиков.

Добавлено: 27 май 2012, 23:58
mexo
Спасибо. Так как пока только начал изучать все это дело, буду пользоваться первым. Он мне более понятен и проще запоминать команды.

Re: Урок 10. Оптимизируем реализацию обработчиков.

Добавлено: 21 июн 2012, 19:20
TheHorse
Рекомендую указать, что последний метод onClick="onclick" - предпочтительней. Так корректней, по умолчанию, с точки зрения общепринятых императивов и "конвенций".

Re: Урок 10. Оптимизируем реализацию обработчиков.

Добавлено: 06 июл 2012, 17:31
xolostyak_by
У меня вопрос немного не по теме урока. Вот есть такой код внутри урока

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. Оптимизируем реализацию обработчиков.

Добавлено: 11 июл 2012, 11:00
damager82
xolostyak_by писал(а):С чего надо начать что бы подобные задачи уменить решать? Или не париться изучать Android а остальное по ходу изучится?
Если вы о Java, то определенно надо изучить хотя бы азы. Без этого дальше будет очень сложно материалы воспринимать.

Re: Урок 10. Оптимизируем реализацию обработчиков.

Добавлено: 11 июл 2012, 16:53
baxxabit
В нашем случае мы будем присваивать один обработчик ОБОИМ кнопкам, а внутри обработчика надо будет определять, какая именно кнопка была нажата.
Обеим же, или я не прав?

Re: Урок 10. Оптимизируем реализацию обработчиков.

Добавлено: 12 июл 2012, 09:34
damager82
baxxabit писал(а):В нашем случае мы будем присваивать один обработчик ОБОИМ кнопкам, а внутри обработчика надо будет определять, какая именно кнопка была нажата.
Обеим же, или я не прав?
Правы, спасибо!
Еще и обЕих, а не обОих )) Пофиксил

Re: Урок 10. Оптимизируем реализацию обработчиков.

Добавлено: 18 июл 2012, 14:47
Daniil
а покажите как выглядит код MainActivity.java на примере 2х кнопок, с применением метода onClick .

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

Код: Выделить всё

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

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

Код: Выделить всё

<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. Оптимизируем реализацию обработчиков.

Добавлено: 18 июл 2012, 16:31
damager82
Daniil писал(а):Мне кажется что можно как-то оптимизировать вот эту часть:

Код: Выделить всё

  public void btnOk_Click(View v)	{    	
    	tvOut.setText("Нажата кнопку Ok");
    }
    
    public void btnCancel_Click(View v) {
    	tvOut.setText("Нажата кнопка Cancel");
    }
используя условные выражения, только не могу что-то сообразить как именно это будет выглядеть, подскажите.
Для обоих кнопок прописываете один метод в атрибуте android:onClick. А в его реализации в Activity проверяете v.getId() на соответствие ID кнопок.

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" />
Activity:

Код: Выделить всё

	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. Оптимизируем реализацию обработчиков.

Добавлено: 18 июл 2012, 18:56
Daniil
Понял, спасибо, не сообразил что "onBtnClick" -это название метода, в android:onClick="onBtnClick"

Re: Урок 10. Оптимизируем реализацию обработчиков.

Добавлено: 01 авг 2012, 14:03
samarjan
Если использовать второй метод, где используется метод объекта Activity то можно обрабатывать в методе onClick не только кнопки, но и другие компоненты? По-моему самый удобный и универсальный способ

Re: Урок 10. Оптимизируем реализацию обработчиков.

Добавлено: 01 авг 2012, 20:20
Jack_killer
samarjan писал(а):Если использовать второй метод, где используется метод объекта Activity то можно обрабатывать в методе onClick не только кнопки, но и другие компоненты? По-моему самый удобный и универсальный способ
ну так ведь можно и в другие компоненты прописывать обработчик onClick, а в методе обрабатывать через swich.

Re: Урок 10. Оптимизируем реализацию обработчиков.

Добавлено: 01 авг 2012, 20:28
samarjan
Тогда получается эмулятор сначала расценивает клик не как по кнопке а как по самому окну Activity а там дальше передает конкретнее что было нажато, верно?
Jack_killer, все равно мне кажется это удобнее и правильнее