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

Обсуждение уроков
insider
Сообщения: 13
Зарегистрирован: 30 ноя 2012, 19:40

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

Сообщение insider » 30 ноя 2012, 19:43

Меня интересует обработка нажатия через вариант с layout. Нужно просто указать android:onClick="%мойМетод%", реализовать его в коде, и все? Должен ли Activity в данном случае реализовывать интерфейс OnClickListener?

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

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

Сообщение AndreyI » 01 дек 2012, 03:58

Нет не должен.
Единственное условие, сигнатура метода должна полностью совпадать.
public void %мойМетод% (View v){...}

insider
Сообщения: 13
Зарегистрирован: 30 ноя 2012, 19:40

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

Сообщение insider » 04 дек 2012, 18:16

AndreyI, спасибо, все отлично. Я где-то ошибся сначала, сразу не заработало, решил спросить.

nikldikolas
Сообщения: 8
Зарегистрирован: 01 фев 2013, 15:10

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

Сообщение nikldikolas » 04 фев 2013, 13:32

AndreyI писал(а):android:onClick="onClickSrat"
public void onClickStart(View v)
мощно))))))))

allexduuder
Сообщения: 5
Зарегистрирован: 09 фев 2013, 19:57

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

Сообщение allexduuder » 09 фев 2013, 20:01

Привет, господа. Вот писал код по уроку,но он у меня не работает. Смотрю на него - не могу понять что не так. Мож кто метнет меткий глаз ?

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

package com.example.multibutton;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;


public class MainActivity extends Activity {

	TextView screenText;
	Button butOK;
	Button butCancel;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		screenText = (TextView) findViewById(R.id.screenText);
		butOK = (Button) findViewById(R.id.butOK);
		butCancel = (Button) findViewById(R.id.butCancel);
	}
	
	OnClickListener oclBtn = new OnClickListener() {
		
		@Override
		public void onClick(View v) {
			switch (v.getId()) {
			case R.id.butOK:
				screenText.setText(R.string.screenTextOK);
				break;
			case R.id.butCancel:
				screenText.setText(R.string.screenTextCancel);
				break;
			}
		}
	};

	butOK.setOnClickListener(oclBtn);
	butCancel.setOnClickListener(oclBtn);
	}}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

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

Сообщение rezak90 » 09 фев 2013, 20:19

выкладывайте код ошибки, у меня например мозг не способен компилировать исходники на лету.
R.id.team
Политика на форуме запрещена

allexduuder
Сообщения: 5
Зарегистрирован: 09 фев 2013, 19:57

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

Сообщение allexduuder » 09 фев 2013, 21:35

На самом деле просто подчеркивает точку и переменную кликера oclBtn. Буду дома - напишу что пишет пр наведении на красный крест.


-------------update

Syntax error on token "oclBtn", VariableDeclaratorId expected after this token MainActivity.java
Syntax error on token(s), misplaced construct(s) MainActivity.java
Syntax error on token "oclBtn", VariableDeclaratorId expected after this token MainActivity.java
Syntax error on token(s), misplaced construct(s) MainActivity.java

insider
Сообщения: 13
Зарегистрирован: 30 ноя 2012, 19:40

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

Сообщение insider » 11 фев 2013, 22:38

allexduuder писал(а):На самом деле просто подчеркивает точку и переменную кликера oclBtn.
Вы запутались в фигурных скобках:
1. Метод onCreate у вас закрывается фигурной скобкой раньше, чем нужно. Удалите ее в строке 26.
2. В строке 45 одна лишняя скобка.

igor
Сообщения: 4
Зарегистрирован: 21 фев 2013, 13:12

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

Сообщение igor » 21 фев 2013, 13:31

Подскажите почему нельзя обрабатывать нажатие кнопок следующим образом:

btnOk.setOnClickListener(OnClickListener(onClick(tvOut.setText("Нажата кнопка OK"))));

DIMAT
Сообщения: 1
Зарегистрирован: 22 фев 2013, 22:24

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

Сообщение DIMAT » 23 фев 2013, 00:02

Всем привет, иду по ступенькам ваших уроков и в каждый стараюсь дополнит что то от себя, что придумаю на своем предположение. По нажатию копки B1 у меня переходит на другой layout.testlayout, на котором есть кнопка B2, при нажатии которой у меня снова выполняется переход на layout.main. Прошу поправить меня тут, если я не полностью понял суть этого метода, думаю мне простительно как новичку.
Проблема в том что при присвоение обработчика кнопке B2 которая находится на втором layout.testlayout, в эмуляторе происходит ошибка еще при попытке запустить приложение, не доходя до выполнения этого события.

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

protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		Button b1=(Button)findViewById(R.id.b1);
		Button b2=(Button)findViewById(R.id.b2);
		OnClickListener b11 = new OnClickListener()
		{
			public void onClick(View v)
			{
				switch (v.getId())
				{
				case R.id.b1:
				
				setContentView(R.layout.testlayout);
				break;
				case R.id.b2:
				
				setContentView(R.layout.main);
				break;
				
				}
			}
		};
		
		b1.setOnClickListener(b11);
		b2.setOnClickListener(b11);
	}
Побывал присваивать каждой кнопке свое событие, та же самая ошибка, если закономерность присвоение кнопке b2, то все работает.

Еще раз напомню что в коде нету ни какой ошибки.
Объясните в чем хитрость, у кого есть время, я пока пойду дальше по урокам. За ранее спасибо.

igsru
Сообщения: 2
Зарегистрирован: 25 фев 2013, 16:21

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

Сообщение igsru » 25 фев 2013, 16:30

DIMAT писал(а):Всем привет, иду по ступенькам ваших уроков и в каждый стараюсь дополнит что то от себя, что придумаю на своем предположение. По нажатию копки B1 у меня переходит на другой layout.testlayout, на котором есть кнопка B2, при нажатии которой у меня снова выполняется переход на layout.main. Прошу поправить меня тут, если я не полностью понял суть этого метода, думаю мне простительно как новичку.
Проблема в том что при присвоение обработчика кнопке B2 которая находится на втором layout.testlayout, в эмуляторе происходит ошибка еще при попытке запустить приложение, не доходя до выполнения этого события.

Побывал присваивать каждой кнопке свое событие, та же самая ошибка, если закономерность присвоение кнопке b2, то все работает.

Еще раз напомню что в коде нету ни какой ошибки.
Объясните в чем хитрость, у кого есть время, я пока пойду дальше по урокам. За ранее спасибо.
Я сам новичок. Читаю уроки по порядку как и вы. Смею предположить что в layout.main не существует объект Button b2=(Button)findViewById(R.id.b2);. Вы этой строкой нашли его ид, но система его не создает для layout.main. Это как локальная переменная которая не видна из данного места.

Может конечно я не прав. Гуру сейчас укажут точнее причину.

igsru
Сообщения: 2
Зарегистрирован: 25 фев 2013, 16:21

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

Сообщение igsru » 25 фев 2013, 16:33

Вариант создания обработчика №3 очень похож на написание в VisualStudio в Visual Basic 6. Легко и понятно, как для машины (по скорости) не знаю, но для новичка однозначна проще.

ImNIK
Сообщения: 1
Зарегистрирован: 03 апр 2013, 11:45

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

Сообщение ImNIK » 15 апр 2013, 09:12

Ребята я одного не понимаю. Зачем в этом и прошлом уроке обработчик событий создается в методе Create? Зачем его туда впихивать? Почему бы его не сделать просто внутри класса MainActivity?

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

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

Сообщение klblk » 15 апр 2013, 10:17

ImNIK писал(а):Ребята я одного не понимаю. Зачем в этом и прошлом уроке обработчик событий создается в методе Create? Зачем его туда впихивать? Почему бы его не сделать просто внутри класса MainActivity?
А зачем нам локальные переменные? Давайте все объявлять глобально!

Если мы используем обработчик событий только в методе onCreate, то и смысла его выводить за пределы метода нет.
Гуру поправят меня если я ошибаюсь)

АлександрБ
Сообщения: 2
Зарегистрирован: 11 май 2013, 17:54

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

Сообщение АлександрБ » 12 май 2013, 11:55

Всем привет, сразу скажу спасибо за уроки. У меня возникла проблема с последним и самым легким методом :) Суть такова: поставил на кнопку ОК метод "онклил", однако при нажатии в эмуляторе выскакивает ошибка: "The application EasyOnClick(ru.ru.easyonclick) has stopped unexpectedly. Please try again. Ошибок не показывает в окне программы, логи тоже ничего не пишут.
MainActivity

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

package ru.ru.easyonclick;

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 {
TextView textView1;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		textView1 = (TextView) findViewById(R.id.textView1);
		}
	public void OnClickStart (View v) {
	textView1.setText("Her name is Alice");
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
	}
main.xml

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

<TableLayout 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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />
<TableRow
    	android:id="@+id/tableRow1"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content" >

   		 <Button 
    		android:id="@+id/buttonOK"
    		android:layout_width="wrap_content"
    		android:layout_height="wrap_content"
    		android:layout_weight="4"
    		android:onClick="onClickStart"
    		android:text="OKEY" />
		
		<Button
	    	android:id="@+id/buttonCANCEL"
	    	android:layout_width="wrap_content"
	    	android:layout_height="wrap_content"
	    	android:layout_weight="6"
	    	android:text="CANCEL" />
 </TableRow>


</TableLayout>
Буду благодарен если кто скажет в чем проблема.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

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

Сообщение rezak90 » 12 май 2013, 11:58

в xml onClickStart а в код ОnClickStart, чувствуете разницу?
R.id.team
Политика на форуме запрещена

АлександрБ
Сообщения: 2
Зарегистрирован: 11 май 2013, 17:54

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

Сообщение АлександрБ » 15 май 2013, 16:32

rezak90 писал(а):в xml onClickStart а в код ОnClickStart, чувствуете разницу?
Спасибо большое за помощь. Да, действительно разница чувствуется. Еще раз спасибо!

Аватара пользователя
anber
Сообщения: 584
Зарегистрирован: 10 июн 2013, 15:05
Откуда: UA

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

Сообщение anber » 14 июн 2013, 16:49

x.dr, я все видел :lol:
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.

Аватара пользователя
faraonCar
Сообщения: 7
Зарегистрирован: 18 июн 2013, 21:34

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

Сообщение faraonCar » 20 июн 2013, 21:30

У АлександрБ батон Cancel без строки в main.xml => android:onClick="onClickStart" работать не будет.

Dmitriy
Сообщения: 4
Зарегистрирован: 23 июн 2013, 14:06

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

Сообщение Dmitriy » 23 июн 2013, 14:14

подскажите, почему у меня очень часто показывает что я неправильно написал код? и не помогает ctrl+shift+O, каждый раз такое, хотя я делал всё строго как на видео и на сайте
Вложения
Screenshot-738.jpg
Screenshot-738.jpg (213.52 КБ) 7681 просмотр
Screenshot-737.jpg
Screenshot-737.jpg (211.66 КБ) 7681 просмотр
Screenshot-739.jpg
Screenshot-739.jpg (211.97 КБ) 7681 просмотр

Ответить