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

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

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

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

Добавлено: 01 дек 2012, 03:58
AndreyI
Нет не должен.
Единственное условие, сигнатура метода должна полностью совпадать.
public void %мойМетод% (View v){...}

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

Добавлено: 04 дек 2012, 18:16
insider
AndreyI, спасибо, все отлично. Я где-то ошибся сначала, сразу не заработало, решил спросить.

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

Добавлено: 04 фев 2013, 13:32
nikldikolas
AndreyI писал(а):android:onClick="onClickSrat"
public void onClickStart(View v)
мощно))))))))

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

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

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

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

}

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

Добавлено: 09 фев 2013, 20:19
rezak90
выкладывайте код ошибки, у меня например мозг не способен компилировать исходники на лету.

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

Добавлено: 09 фев 2013, 21:35
allexduuder
На самом деле просто подчеркивает точку и переменную кликера 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

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

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

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

Добавлено: 21 фев 2013, 13:31
igor
Подскажите почему нельзя обрабатывать нажатие кнопок следующим образом:

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

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

Добавлено: 23 фев 2013, 00:02
DIMAT
Всем привет, иду по ступенькам ваших уроков и в каждый стараюсь дополнит что то от себя, что придумаю на своем предположение. По нажатию копки 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, то все работает.

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

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

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

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

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

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

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

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

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

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

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

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

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

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>
Буду благодарен если кто скажет в чем проблема.

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

Добавлено: 12 май 2013, 11:58
rezak90
в xml onClickStart а в код ОnClickStart, чувствуете разницу?

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

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

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

Добавлено: 14 июн 2013, 16:49
anber
x.dr, я все видел :lol:

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

Добавлено: 20 июн 2013, 21:30
faraonCar
У АлександрБ батон Cancel без строки в main.xml => android:onClick="onClickStart" работать не будет.

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

Добавлено: 23 июн 2013, 14:14
Dmitriy
подскажите, почему у меня очень часто показывает что я неправильно написал код? и не помогает ctrl+shift+O, каждый раз такое, хотя я делал всё строго как на видео и на сайте