Урок 9. Обработчики событий на примере Button.

Обсуждение уроков
Djon745
Сообщения: 6
Зарегистрирован: 12 фев 2013, 13:21

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Djon745 » 16 фев 2013, 01:14

Для чего нужен @Override в коде

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

Re: Урок 9. Обработчики событий на примере Button.

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

Djon745 писал(а):Для чего нужен @Override в коде
Эта аннотация говорит компилятору что идёт переопределение базового метода. Я где то читал что если например переопределить метод onResume (или какой то другой из методов жизненного цикла активити) без указания аннотации то бывали случаи что эти методы не вызывались.
R.id.team
Политика на форуме запрещена

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

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Djon745 » 17 фев 2013, 00:50

OnClickListener oclBtnCancel = new OnClickListener() {
@Override
public void onClick(View v)
А как понять первую строчку и что означает или для чего нужна буква v в скобках (View v)

Озорная Свинья
Сообщения: 59
Зарегистрирован: 02 фев 2013, 00:03

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Озорная Свинья » 17 фев 2013, 12:53

v типо объект view, грубо говоря: public void onClick(Button oclBtnCancel), ежели присвоить десяти кнопкам один и тот же обработчик OnClick, то по этой фигне можно понять какая из 10-ти кнопок кликнута, наверно :)

Ivan Zamurenko
Сообщения: 14
Зарегистрирован: 18 ноя 2012, 23:55

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Ivan Zamurenko » 18 фев 2013, 15:07

Добрый день, столкнулся с проблемой:

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

public class Radisson_registration extends Activity {
	
	//Component`s
	ToggleButton tglButton_step_1, tglButton_step_2, tglButton_step_3;
	EditText etName, etSurname, etLastname, etMobile;
	Button btnBack, btnNext;
	
	Intent mainActivity, step_2_Activity;
	
	//Values
	public String clName="", clSurname="", clLastname="", clMobile="";
	
	
	protected void onCreate(Bundle savedInstanceState) {
		
		super.onCreate(savedInstanceState);
		setContentView(R.layout.radisson_registration_step_1);
		components(); //Display component`s
		
		//onClickListener for "back" button
		btnBack.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				mainActivity = new Intent(this,Radisson_BLU.class);
				startActivity(mainActivity);
				
			}
			
		});
		
	}
Ошибка возникает на

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

 mainActivity = new Intent(this,Radisson_BLU.class);
.

Компилятор говорит убрать параметры. Возможно ли сделать переход в другое активити, с помощью обычного нажатия кнопки?
Или придется выдумывать флаги, которые передадут значение и в onCreatre произвести переход?

Спасибо за помощь

Ivan Zamurenko
Сообщения: 14
Зарегистрирован: 18 ноя 2012, 23:55

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Ivan Zamurenko » 18 фев 2013, 15:29

Прошу прощения, я справился. =) Не правильно видимо я организовал... Сглупил немного. Просто стоит лишь вынести за OnCreate.

sgushenka
Сообщения: 6
Зарегистрирован: 21 мар 2013, 06:33

Re: Урок 9. Обработчики событий на примере Button.

Сообщение sgushenka » 21 мар 2013, 06:38

Все доброго времени суток) Сама программка у меня запустилась, но я захотел использовать OnLongClickListener вместо OnClickListener, написал для неё код

package ru.startandroid.develop.onclickbuttons;

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


public class MainActivity extends Activity {

TextView tvOut = (TextView) findViewById(R.id.tvOut);
Button btnOk = (Button) findViewById(R.id.btnOk);
Button btnCancel = (Button) findViewById(R.id.btnCancel);;
int plus=0;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

btnOk.setOnLongClickListener(new View.OnLongClickListener() {
public boolean onLongClick(View v) {
// Меняем текст в TextView (tvOut)
tvOut.setText("Нажата клавиша ОК");
while(plus!=500)
{
tvOut.setText(plus);
plus++;
}
return true;
}
});
}
}

Но в телефоне программа выдаёт что в приложении ошибка. Может вы подскажете в чём именно?

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 9. Обработчики событий на примере Button.

Сообщение KamiSempai » 21 мар 2013, 14:12

plus тут целое число и setText воспринимает его как ID строки из ресурсов.
Исправьте на: tvOut.setText(Integer.toString(plus));
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

sgushenka
Сообщения: 6
Зарегистрирован: 21 мар 2013, 06:33

Re: Урок 9. Обработчики событий на примере Button.

Сообщение sgushenka » 21 мар 2013, 15:06

plus тут целое число и setText воспринимает его как ID строки из ресурсов.
Исправьте на: tvOut.setText(Integer.toString(plus));
Это исправил, но программа так и вылетает. Я вот что подумал, может это из-за самой функции OnLongClickListener? В случае с OnClickListener приходится организовывать импорт CTRL+shift+O, а тут не нужно... может я саму функцию OnLongClickListener не верно описал?

snowkam
Сообщения: 162
Зарегистрирован: 21 мар 2013, 11:22

Re: Урок 9. Обработчики событий на примере Button.

Сообщение snowkam » 21 мар 2013, 15:33

Мне кажется вы гдето опечатались при использовании интерфейса OnLongClickListener необходим импорт import android.view.View.OnLongClickListener;

Вот рабочий пример

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

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnLongClickListener;
import android.widget.Toast;

public class MainActivity extends Activity {
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		
		
		findViewById(R.id.btnOk).setOnLongClickListener(new OnLongClickListener() {			
			@Override
			public boolean onLongClick(View v) {
				mess();
				return false;
			}
		});
	}

	@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;
	}
	public void mess(){
		Toast.makeText(this, "click LONG", Toast.LENGTH_LONG).show();
	}

}


sgushenka
Сообщения: 6
Зарегистрирован: 21 мар 2013, 06:33

Re: Урок 9. Обработчики событий на примере Button.

Сообщение sgushenka » 22 мар 2013, 03:30

Мне кажется вы гдето опечатались при использовании интерфейса OnLongClickListener необходим импорт import android.view.View.OnLongClickListener;

Вот рабочий пример
Это хороший пример, но а если мне, например, нужно выводить сообщение не в Toast а в простом TextView, допустим, чтобы просто число увеличивалось постоянно на единицу при долгом нажатии?

Попробовал вот так
  • public void mess(){
    plus++;
    TextView.setText(Integer.toString(plus));
    }
Но опять же ошибка.

snowkam
Сообщения: 162
Зарегистрирован: 21 мар 2013, 11:22

Re: Урок 9. Обработчики событий на примере Button.

Сообщение snowkam » 22 мар 2013, 09:05

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

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;   
import android.view.View.OnLongClickListener; 
import android.widget.Button;
import android.widget.TextView;
// и вот импорт 

// посмотри два интерфейса 
public class MainActivity extends Activity implements OnClickListener, OnLongClickListener {
	Button btnOk;
	TextView tv;
	int count_click, count_long_click;
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		btnOk = (Button)findViewById(R.id.btnOk);
		tv = (TextView) findViewById(R.id.tv);
		// прикручиваем все наши события к кнопке
		
		
		btnOk.setOnClickListener(this);
		btnOk.setOnLongClickListener(this);
	}

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

	
	public boolean onLongClick(View v) {
		// TODO Auto-generated method stub
		count_long_click++;
		//вот так делать не кчему не нужно целое число приводить к строке java сама здесь разберется 
		// посмотри как сделанно в методи onClick
		tv.setText("Long click " + Integer.toString(count_long_click));
		return false;
	}

	
	public void onClick(View v) {
		// При нажатии один раз на кнопку будет изменятся надпись на кнопке
		count_click++;
		btnOk.setText("Click "+ count_click);
		
	}

}

Опять рабочий пример. ;)

Бро, в следующий раз давай побольше инфи например что за ошибку выдает и т.д. Я сам учусь и не умею понимать на лету

sgushenka
Сообщения: 6
Зарегистрирован: 21 мар 2013, 06:33

Re: Урок 9. Обработчики событий на примере Button.

Сообщение sgushenka » 22 мар 2013, 12:22

Опять рабочий пример.
Спасибо огромное! прям выручил этим примером! Только вопрос в другом) При зажатии клавиши, в элементе TextView должно было отображаться увеличение числа ) в примере тоже увеличивается число, но только раз, а нужно чтобы непрерывно... опять же, пытаюсь написать свой код

  • public boolean onLongClick(View v) {
    // TODO Auto-generated method stub
    for(int i=0; i<10;)
    {
    count_long_click++;
    //вот так делать не кчему не нужно целое число приводить к строке java сама здесь разберется
    // посмотри как сделанно в методи onClick
    TextView.setText("Long click" + Integer.toString(count_long_click));
    i++;
    try
    {
    Thread.sleep(1000);
    }
    catch (InterruptedException e){}

    }
    return false;
    }

но что он делает: зажимаю кнопку, она продолжает гореть синим(как будто я её продолжаю нажимать) проходит 10 секунд и только тогда выводится сообщение Long click 10. Если считаешь что я обнаглел в конец и не хочу ничего писать, то напиши - чтобы я читал про потоки, и перешёл куда нибудь по http://www.dvgu.ru/meteo/PC/javalife.htm#part_4 ссылке, но всё таки я не могу разобраться с этим...

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 9. Обработчики событий на примере Button.

Сообщение KamiSempai » 22 мар 2013, 12:56

Команда Thread.sleep(1000) отправляет текущий поток в баиньки-баю на 1 секунду.
В данном случае Вы отправляете в сон поток отвечающий за отрисовку экрана. Поэтому и происходят зависания.
У Вас цикл 10 раз вызывает эту команду, в итоге 10 секунд здорового и расслабляющего сна :)
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

sgushenka
Сообщения: 6
Зарегистрирован: 21 мар 2013, 06:33

Re: Урок 9. Обработчики событий на примере Button.

Сообщение sgushenka » 22 мар 2013, 12:58

Команда Thread.sleep(1000) отправляет текущий поток в баиньки-баю на 1 секунду.
В данном случае Вы отправляете в сон поток отвечающий за отрисовку экрана. Поэтому и происходят зависания.
У Вас цикл 10 раз вызывает эту команду, в итоге 10 секунд здорового и расслабляющего сна
Ведь нужно чтобы с некоторой задержкой выводились числа в TextView

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 9. Обработчики событий на примере Button.

Сообщение KamiSempai » 22 мар 2013, 13:04

Нужно запустить отдельный поток и выполнять выше описанный код. Но в том виде в каком он сейчас, работать тоже не будет.
Советую отложить этот вопрос на потом. В уроках 80 -85 об этом будет подробно рассказано.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

snowkam
Сообщения: 162
Зарегистрирован: 21 мар 2013, 11:22

Re: Урок 9. Обработчики событий на примере Button.

Сообщение snowkam » 22 мар 2013, 13:25

вот я тоже пока не буду вникать пока не дойду до 80-85 урока. Но мысль понял. Я если чесно и сам не знаю что еще к чему

snowkam
Сообщения: 162
Зарегистрирован: 21 мар 2013, 11:22

Re: Урок 9. Обработчики событий на примере Button.

Сообщение snowkam » 22 мар 2013, 14:02

sgushenka - ты не туда копаешь мне кажется вот что тебе нужно http://startandroid.ru/ru/uroki/vse-uro ... a-kasanija урок номер 102

sgushenka
Сообщения: 6
Зарегистрирован: 21 мар 2013, 06:33

Re: Урок 9. Обработчики событий на примере Button.

Сообщение sgushenka » 22 мар 2013, 14:19

Вот решение, если кому-то интересно

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

package ru.startandroid.develop.onclickbuttons;

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

// посмотри два интерфейса
public class MainActivity extends Activity implements OnClickListener, OnLongClickListener {
        Button btnUp;
        TextView TextView;
        int count_click, count_long_click=0;  
        
        
        private int t = 0;
        private RefreshHandler mRedrawHandler = new RefreshHandler();

       // private static final int LONG_DELAY = 3500; // 3.5 seconds
  

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                btnUp = (Button)findViewById(R.id.btnUp);
                TextView = (TextView) findViewById(R.id.TextView);
                // прикручиваем все наши события к кнопке
                btnUp.setOnClickListener(this);
                btnUp.setOnLongClickListener(this);
        }

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

 
        public boolean onLongClick(View v) {
                // TODO Auto-generated method stub
        	//for(int i=0; i<10;)
        	//{
               // count_long_click++;
                //TextView.setText("");
               // TextView.setText(new Integer(count_long_click).toString()); 
               // i++;
        		updateUI();
        		
  
                           
                

        	//}
                return false;
        }

		class RefreshHandler extends Handler {
		      @Override
		        public void handleMessage(Message msg) {
		           if (t < 10)MainActivity.this.updateUI();
		        }

		        public void sleep(long delayMillis) {
		            this.removeMessages(0);
		            sendMessageDelayed(obtainMessage(0), delayMillis);
		        }
		    };

        private void updateUI() {

            TextView name = (TextView) findViewById(R.id.TextView);
            name.setText(Integer.toString(t));
            mRedrawHandler.sleep(1000);
            t++;
        }

        

		public void onClick(View v) {
                // При нажатии один раз на кнопку будет изменятся надпись на кнопке
                count_click++;
                btnUp.setText("Click "+ count_click);
            }

 

}

snowkam
Сообщения: 162
Зарегистрирован: 21 мар 2013, 11:22

Re: Урок 9. Обработчики событий на примере Button.

Сообщение snowkam » 22 мар 2013, 14:42

Прости друг но так не интересно!!!! У тебя циферки бегут не зависимо держишь ты кнопку или отпустил. Событие сработало при долгом нажатии а дальше дело техники.

Ответить