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

Обсуждение уроков
Venya
Сообщения: 10
Зарегистрирован: 17 авг 2013, 14:12

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

Сообщение Venya » 17 авг 2013, 14:38

Ребят у меня вопрос:
Я программно создаю кнопки, тут же присваиваю каждой обработчик. При нажатии на любую кнопку, она меняет цвет (на желтый), а при повторном цвет становится прежним (синим) (это работает).
Мне нужно, чтобы при нажатии на другую кнопку, уже нажатая кнопка меняла цвет с желтого на изначальный (Синий).
Как можно при нажатии на одну кнопку (созданную программно) менялись свойства (id или что-нибудь ещё) других кнопок (тоже созданных во время работы приложения).

вот код. Тут просто работают нажатия на каждую кнопку:
[syntax=java]for (int i=0;i<9;i++) //Создаю 9 кнопок
{
final Button btnNew = new Button(this);
btnNew.setText(String.valueOf(i+1)); //номер присваиваю
btnNew.setId(0);

OnClickListener oclBtnOk = new OnClickListener() {
@Override
public void onClick(View v) { // обработчик

Resources res = getResources();
Drawable Active = res.getDrawable(R.drawable.button_background2);
Drawable Passive = res.getDrawable(R.drawable.button_background); //тупо нахожу ресурсы активного и пассивного цвета

if ((v.getId())==1) // если кнопка уже нажата
{
v.setId(0);
v.setBackgroundDrawable(Passive); // мы эту кнопку отключаем
}
else // Если не нажата
{
v.setId(1);
v.setBackgroundDrawable(Active); // Мы ее включаем
}
}
};
btnNew.setOnClickListener(oclBtnOk);

Drawable background = this.getResources().getDrawable(R.drawable.button_background);
btnNew.setBackgroundDrawable(background); // а это по умолчанию кнопки данного цвета

LCenter.addView(btnNew, lParams);
}[/syntax]

Вот нажимаются кнопки, а должна быть активной только одна.
Изображение

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

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

Сообщение Foenix » 17 авг 2013, 18:19

можно массив завести под каждую кнопку - один элемент и менять его в зависимости от положения. А можно использовать свойство кнопки tag и записывать ее положение туда, а потом проверять..
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Venya
Сообщения: 10
Зарегистрирован: 17 авг 2013, 14:12

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

Сообщение Venya » 17 авг 2013, 20:42

Foenix писал(а):можно массив завести под каждую кнопку - один элемент и менять его в зависимости от положения. А можно использовать свойство кнопки tag и записывать ее положение туда, а потом проверять..
Спасибо! Получилось использовать TAG.
Однако образовался еще 1 вопрос:

Как заменить такое условие if ((v.getId())==1) на такое, где используется tag. что-то типо этого if ((v.getTag())==myTag)?
Просто хочу избавиться от id, чтоб уменьшить код.
[syntax=java]for (int i=0;i<9;i++)
{
final Button btnNew = new Button(this);
btnNew.setText(String.valueOf(i+1));
btnNew.setTag(tagPassive);
btnNew.setId(0);

OnClickListener oclBtnOk = new OnClickListener() {
@Override
public void onClick(View v) {

Resources res = getResources();
Drawable Active = res.getDrawable(R.drawable.button_background2);
Drawable Passive = res.getDrawable(R.drawable.button_background);

if ((v.getId())==1)
{
v.setTag(tagPassive);
v.setId(0);
v.setBackgroundDrawable(Passive);
}
else
{
if ((btnOld = (Button) findViewById (tagActive)) != null)
btnOld.setBackgroundDrawable(Passive);
btnOld.setTag(tagPassive);
btnOld.setId(0);
}

v.setId(1);
v.setTag(tagActive);
v.setBackgroundDrawable(Active);
}
}
};
btnNew.setOnClickListener(oclBtnOk);

Drawable background = this.getResources().getDrawable(R.drawable.button_background);
btnNew.setBackgroundDrawable(background);

LCenter.addView(btnNew, lParams);
}[/syntax]

Странно, почему выдает ошибку в switch(v.getTag()), если так, например, использовать:
[syntax=java]public void onClick(View v) {
switch(v.getTag())
{
case 1:
DoSomething();
break;

case 2:
DoSomething2();
break;

default:
break;
}[/syntax]

Вот такая ошибка:
Incompatible operand types Object and int

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

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

Сообщение Foenix » 17 авг 2013, 22:24

1!!!! сразу говорю так ((v.getTag())==myTag)
строки не сравнивают!!!

UPD: Поспешила, но стирать не буду, не строковое это значение -падает в getTag() а действительно, Object. Его можно пробразовать в строку дописав (у него есть метод) v.getTag().toString(), и тогда это будет строка, и ее нужно правильно сравнить со значением стрковым.
А если хотите его преобразовать в int то можно эту строчку преобразовать, например так:

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

Integer.parseInt((String) v.getTag());
и при этом обработать исключение (вдруг там не int?)

И тогда уже это значение можешь использовать в switch

Кстати, вот когда пишешь калькулятор - туда удобно записать именно то число, которое обозначает кнопка, чтоб сразу его заносить безо всяких преобразований в EditText, посмотри, может быть и тебе удобно туда не абстрактное число заносить, а тот же номер цвета? Ну это как уж по логике программы.

Вообще т.к. это объект, туда по сути можно любой тип запихнуть, создать пользовательский массив, занести туда цвета и прочее..
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Venya
Сообщения: 10
Зарегистрирован: 17 авг 2013, 14:12

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

Сообщение Venya » 18 авг 2013, 00:32

Foenix писал(а):1!!!! сразу говорю так ((v.getTag())==myTag)
строки не сравнивают!!!

UPD: Поспешила, но стирать не буду, не строковое это значение -падает в getTag() а действительно, Object. Его можно пробразовать в строку дописав (у него есть метод) v.getTag().toString(), и тогда это будет строка, и ее нужно правильно сравнить со значением стрковым.
А если хотите его преобразовать в int то можно эту строчку преобразовать, например так:

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

Integer.parseInt((String) v.getTag());
и при этом обработать исключение (вдруг там не int?)

И тогда уже это значение можешь использовать в switch

Кстати, вот когда пишешь калькулятор - туда удобно записать именно то число, которое обозначает кнопка, чтоб сразу его заносить безо всяких преобразований в EditText, посмотри, может быть и тебе удобно туда не абстрактное число заносить, а тот же номер цвета? Ну это как уж по логике программы.

Вообще т.к. это объект, туда по сути можно любой тип запихнуть, создать пользовательский массив, занести туда цвета и прочее..
Так ты девушка ?!!!! Круто :D

Спасибо за ответ. Думаю все получится. К слову, планировалось, что это будет Сапер :D . Просто пока не добавил остальные кнопки)

Вашим способом не получилось (тут я наверно идиот). Получилось так:
int docId = (Integer)v.getTag();

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

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

Сообщение Foenix » 18 авг 2013, 01:16

почему? это просто оператор приведения к типу, но это ставится в том случае, если у тебя в объекте сто 100% целое число записано.
А раз ты туда целое записал.. то так тоже можно.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Venya
Сообщения: 10
Зарегистрирован: 17 авг 2013, 14:12

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

Сообщение Venya » 18 авг 2013, 01:51

Foenix писал(а):почему? это просто оператор приведения к типу, но это ставится в том случае, если у тебя в объекте сто 100% целое число записано.
А раз ты туда целое записал.. то так тоже можно.
Получается вот такой экранчик. Вроде все работает. Но мне не нравится, что эмулятор думает где то секунду перед тем как все эти кнопки создать. Не знаете как можно облегчить это дело?)
Изображение

[syntax=java]public class GameActivity extends Activity implements OnClickListener {

final String LOG_TAG = "myLogs";
Button BTBack, BTPause, BTRestart, BTLeft, BTCenter, BTRight, btnOld;
RelativeLayout LGame;
LinearLayout LCenter;
int MyColor;
int wrapContent = LinearLayout.LayoutParams.WRAP_CONTENT;
int fillParent = LinearLayout.LayoutParams.FILL_PARENT;
static final int tagActive = 1,tagPassive = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.game);

Intent IntentOpt = getIntent();
MyColor = IntentOpt.getIntExtra("BackColorGame", MyColor);
LGame = (RelativeLayout) findViewById(R.id.LGame);
LGame.setBackgroundColor(MyColor);

BTBack = (Button) findViewById(R.id.BTBack);
BTPause = (Button) findViewById(R.id.BTPause);
BTRestart = (Button) findViewById(R.id.BTRestart);
BTLeft = (Button) findViewById(R.id.BTLeft);
BTCenter = (Button) findViewById(R.id.BTCenter);
BTRight = (Button) findViewById(R.id.BTRight);

BTBack.setOnClickListener(this);
BTPause.setOnClickListener(this);
BTRestart.setOnClickListener(this);
BTLeft.setOnClickListener(this);
BTCenter.setOnClickListener(this);
BTRight.setOnClickListener(this);

LCenter = (LinearLayout) findViewById(R.id.LCenter);
LinearLayout.LayoutParams btnParams = new LinearLayout.LayoutParams(fillParent, fillParent);
LinearLayout.LayoutParams llParams = new LinearLayout.LayoutParams(wrapContent, wrapContent);
btnParams.gravity = Gravity.CENTER_HORIZONTAL;

Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int MyWidth = display.getWidth();
int MyHeight = display.getHeight();

btnParams.height = MyWidth/9;
btnParams.weight = 1;

for (int j=0; j<9; j++)
{
LinearLayout LNew = new LinearLayout(this);
LCenter.addView(LNew, llParams);
for (int i=0;i<9;i++)
{

Button btnNew = new Button(this);
btnNew.setText(String.valueOf(j*9+i+1));
btnNew.setTag(tagPassive);

OnClickListener oclBtnOk = new OnClickListener() {
@Override
public void onClick(View v) {

BTCenter.setText(String.valueOf(v.getTag()));
Log.d(LOG_TAG, "0" );
Resources res = getResources();
Drawable Active = res.getDrawable(R.drawable.button_background2);
Drawable Passive = res.getDrawable(R.drawable.button_background);

int TagToInt = (Integer)v.getTag();
if (TagToInt==1)
{
v.setTag(tagPassive);
v.setBackgroundDrawable(Passive);
}
else
{
if ((btnOld = (Button) LCenter.findViewWithTag (tagActive)) != null)
{
btnOld.setBackgroundDrawable(Passive);
btnOld.setTag(tagPassive);
}

v.setTag(tagActive);
v.setBackgroundDrawable(Active);
}
BTRight.setText(String.valueOf(v.getTag()));
}
};
btnNew.setOnClickListener(oclBtnOk);

Drawable background = this.getResources().getDrawable(R.drawable.button_background);
btnNew.setBackgroundDrawable(background);

LNew.addView(btnNew, btnParams);
}
}
}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.BTBack:
finish();
break;
case R.id.BTPause:

break;
case R.id.BTRestart:

break;
case R.id.BTLeft:

break;
case R.id.BTCenter:

break;
case R.id.BTRight:

break;
default:
break;
}
}
}
[/syntax]
Последний раз редактировалось Venya 18 авг 2013, 01:54, всего редактировалось 1 раз.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

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

Сообщение Foenix » 18 авг 2013, 01:53

эмулятор????
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Venya
Сообщения: 10
Зарегистрирован: 17 авг 2013, 14:12

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

Сообщение Venya » 18 авг 2013, 01:55

Foenix писал(а):эмулятор????
Ну я не знаю как называется эта штука :D

p.s. ахахахах, там есть еще страничка перед этой, с которой уже вызывается эта и создаются кнопки)

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

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

Сообщение Foenix » 18 авг 2013, 01:57

да забей, все у тебя красиво получилось
Эмулятор - крайне медленная штука, ты не представляешь сколько времени я жду пока он что-то сделает :-D
на устройстве все летать будет
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Venya
Сообщения: 10
Зарегистрирован: 17 авг 2013, 14:12

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

Сообщение Venya » 18 авг 2013, 22:18

Ладно, вот еще просьба:
Кто-нибудь может привести пример использования этого метода ?
или просто объяснить коротко)
вот этого:
public void findViewsWithText (ArrayList<View> outViews, CharSequence searched, int flags)

А вот ещё вопрос:

Мне нужно использовать в коде эти 3 строчки:
Resources res = getResources();
active = res.getDrawable(R.drawable.button_background2);
passive = res.getDrawable(R.drawable.button_background);


Когда я пишу их в oncreate картинки ведут себя очень странно.
Дергаются и появляются когда не нужно, а если засовываю их в массив, т.е. они создаются каждый раз перед созданием объектов, все нормально. Может кто знает в чем соль?
[syntax=java]public class GameActivity extends Activity implements OnClickListener {

final String LOG_TAG = "myLogs";
Button BTBack, BTPause, BTRestart, BTLeft, BTCenter, BTRight, btnOld, btnRand;
RelativeLayout LGame;
LinearLayout LCenter, LBottom, LTop;
int MyColor;
int wrapContent = LinearLayout.LayoutParams.WRAP_CONTENT;
int fillParent = LinearLayout.LayoutParams.FILL_PARENT;
static final int tagActive = 1,tagPassive = 0, tagBomb = 2, tagNoBomb=3;
static final int tagActiveBomb[] = {tagBomb, tagActive};
static final int tagPassiveBomb[] = {tagBomb, tagPassive};
static final int tagPassiveNoBomb[] = {tagNoBomb, tagPassive};
static final int tagActiveNoBomb[] = {tagNoBomb, tagActive};
static final int kolMass = 9;
int [][] MassPole = new int[9][9];
Drawable active;
Drawable passive;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.game);

Log.d(LOG_TAG, "0" );
Intent IntentOpt = getIntent();
MyColor = IntentOpt.getIntExtra("BackColorGame", MyColor);
LGame = (RelativeLayout) findViewById(R.id.LGame);
LGame.setBackgroundColor(MyColor);
//---------------------Создание Массива-------------------------------------------------------------------------
for (int i=0; i<9;i++)
for (int j=0; j<9;j++)
MassPole[j]=0;
for (int i=0;i<10;)
{
int randX = (int)(Math.random()*8);
int randY = (int)(Math.random()*8);
if (MassPole[randX][randY]!=tagBomb)
{MassPole[randX][randY]=tagBomb;
i++;
}
}
//---------------------------------------------------------------------------------------------------------------


BTBack = (Button) findViewById(R.id.BTBack);
BTPause = (Button) findViewById(R.id.BTPause);
BTRestart = (Button) findViewById(R.id.BTRestart);
BTLeft = (Button) findViewById(R.id.BTLeft);
BTCenter = (Button) findViewById(R.id.BTCenter);
BTRight = (Button) findViewById(R.id.BTRight);

BTBack.setOnClickListener(this);
BTPause.setOnClickListener(this);
BTRestart.setOnClickListener(this);
BTLeft.setOnClickListener(this);
BTCenter.setOnClickListener(this);
BTRight.setOnClickListener(this);

LCenter = (LinearLayout) findViewById(R.id.LCenter);
LTop = (LinearLayout) findViewById(R.id.LTop);
LBottom = (LinearLayout) findViewById(R.id.LBottom);
LinearLayout.LayoutParams btnParams = new LinearLayout.LayoutParams(fillParent, fillParent);
LinearLayout.LayoutParams llParams = new LinearLayout.LayoutParams(wrapContent, wrapContent);
btnParams.gravity = Gravity.CENTER_HORIZONTAL;

Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int MyWidth = display.getWidth();
int MyHeight = display.getHeight();
//---------------------------------------------------------------------------------------------------------------
if (MyHeight - MyWidth < 100)
btnParams.height = MyWidth/9-3;
else
btnParams.height = MyWidth/9;
btnParams.weight = 1;
//---------------------------------------------------------------------------------------------------------------
Resources res = getResources();
active = res.getDrawable(R.drawable.button_background2);
passive = res.getDrawable(R.drawable.button_background);


for (int j=0; j<9; j++)
{
LinearLayout LNew = new LinearLayout(this);
LCenter.addView(LNew, llParams);
for (int i=0;i<9;i++)
{

Button btnNew = new Button(this);
btnNew.setText(String.valueOf(j*9+i+1));
btnNew.setTag(tagPassiveNoBomb);
// btnNew.setId(0);

if (MassPole[j]== tagBomb)
btnNew.setTag(tagPassiveBomb);

OnClickListener oclBtnOk = new OnClickListener() {
@Override
public void onClick(View v) {




int []TagToInt = (int[])v.getTag();
switch(TagToInt[1])
{
case 1:
if (TagToInt[0] == 2)
v.setTag(tagPassiveBomb);
else
v.setTag(tagPassiveNoBomb);
v.setBackgroundDrawable(passive);
break;
case 0:
if ((btnOld = (Button) LCenter.findViewWithTag (tagActiveNoBomb)) != null)
{
btnOld.setBackgroundDrawable(passive);
btnOld.setTag(tagPassiveNoBomb);
}
if ((btnOld = (Button) LCenter.findViewWithTag (tagActiveBomb)) != null)
{
btnOld.setBackgroundDrawable(passive);
btnOld.setTag(tagPassiveBomb);
}

if (TagToInt[0] == 2)
v.setTag(tagActiveNoBomb);
else
v.setTag(tagActiveBomb);
v.setBackgroundDrawable(active);
}
}
};


// btnRand = (Button) LCenter.findViewsWithText(LCenter, String.valueOf(random4ik), tagActive );

btnNew.setOnClickListener(oclBtnOk);

Drawable background = this.getResources().getDrawable(R.drawable.button_background);
btnNew.setBackgroundDrawable(background);

LNew.addView(btnNew, btnParams);
}
}
}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.BTBack:
finish();
break;
case R.id.BTPause:

break;
case R.id.BTRestart:

break;
case R.id.BTLeft:
btnOld = (Button) LCenter.findViewWithTag (tagActive);
// if (btnOld.String.valueOf(getText()) == 2)
// btnOld.setText("gg");
//btnOld = (Button) LCenter.findViewsWithText (tagActive);
break;
case R.id.BTCenter:

break;
case R.id.BTRight:

break;
default:
break;
}
}
}[/syntax]


Появился еще вопрос:
Какие есть еще методы для поиска view кроме этих:

findViewWithTag (Object tag)
findViewsWithText (ArrayList<View> outViews, CharSequence searched, int flags)
findViewById (int id)

stRong
Сообщения: 6
Зарегистрирован: 15 авг 2013, 22:53

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

Сообщение stRong » 19 авг 2013, 22:41

по-моему, мы создаем экземпляр анонимного внутреннего класса (реализующего интерфейс), который записываем в переменную oclBtnOk.
Только не поняла в чем именно проблема-то..
Спасибо! Проблемы не было, просто я не знал такого понятия, как анонимный внутренний класс, и подобная форма создания экземпляра была для меня непонятной.

lUjek
Сообщения: 1
Зарегистрирован: 22 сен 2013, 18:03

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

Сообщение lUjek » 22 сен 2013, 18:07

Изучаю программирование на android всего неделю поэтому прошу мне помочь
[syntax=java]package ru.lujek.hellow;
import android.app.Activity;
import android.os.Bundle;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
Button Btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Btn = (Button) findViewById(R.id.Btn);
}
OnClickListener oclBtn = new OnClickListener(){
@Override
public void onClick(View v) {
Btn.setText("Привет");
}
};
Btn.setOnClickListener(oclBtn);
}[/syntax]
не хочет работать
Btn.setOnClickListener(oclBtn);
. Надеюсь вы мне подскажите что не так

gerundii1
Сообщения: 7
Зарегистрирован: 20 сен 2013, 21:16

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

Сообщение gerundii1 » 22 сен 2013, 18:40

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

public class MainActivity extends Activity implements OnClickListener{

        Button Btn;

        @Override

        protected void onCreate(Bundle savedInstanceState) {

                super.onCreate(savedInstanceState);

                setContentView(R.layout.activity_main);

        Btn = (Button) findViewById(R.id.Btn);
        Btn.setOnClickListener(this);
        }

        public void onClick(View v) {
        Btn.setText("Hi"); 		
       }
}	;

ddr
Сообщения: 1
Зарегистрирован: 23 окт 2013, 10:44

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

Сообщение ddr » 23 окт 2013, 10:55

Что я делаю не так?

package com.example.urok9;

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

public class MainActivity extends Activity {

TextView tvOut;
Button btnOk;
Button btnCancel;

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

// найдем View-элементы
tvOut = (TextView) findViewById(R.id.tvOut);
btnOk = (Button) findViewById(R.id.btnOk);
btnCancel = (Button) findViewById(R.id.btnCancel);

// создаем обработчик нажатия OK
OnClickListener oclBtnOk = new OnClickListener() {
@Override
public void onClick(View v) {
// Меняем текст в TextView (tvOut)
tvOut.setText("Нажата кнопка Ok");


// создаем обработчик нажатия Cancel
OnClickListener oclBtnCancel = new OnClickListener() {
@Override
public void onClick(View v) {
// Меняем текст в TextView (tvOut)
tvOut.setText("Нажата кнопка Cancel");


}
};

// присвоим обработчик кнопке Ok (btnOk)
btnOk.setOnClickListener(oclBtnOk);

// присвоим обработчик кнопке Cancel (btnCancel)
btnCancel.setOnClickListener(oclBtnCancel);




}
}
1.jpg
1.jpg (105.44 КБ) 15676 просмотров
2.jpg
2.jpg (102.59 КБ) 15676 просмотров

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

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

Сообщение Foenix » 23 окт 2013, 21:15

подведи курсор к красному, там будет написана ошибка
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

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

Сообщение trew » 23 окт 2013, 23:48

[quote="ddr"][/quote]
Рабочий вариант:
[syntax=java]import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

TextView tvOut;
Button btnOk;
Button btnCancel;

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

// найдем View-элементы
tvOut = (TextView) findViewById(R.id.tvOut);
btnOk = (Button) findViewById(R.id.btnOk);
btnCancel = (Button) findViewById(R.id.btnCancel);


// создаем обработчик нажатия OK
OnClickListener oclBtnOk = new OnClickListener() {
@Override
public void onClick(View v) {
// Меняем текст в TextView (tvOut)
tvOut.setText("Нажата кнопка Ok");
}
};

// создаем обработчик нажатия Cancel
OnClickListener oclBtnCancel = new OnClickListener() {
@Override
public void onClick(View v) {
// Меняем текст в TextView (tvOut)
tvOut.setText("Нажата кнопка Cancel");
}
};

// присвоим обработчик кнопке Ok (btnOk)
btnOk.setOnClickListener(oclBtnOk);

// присвоим обработчик кнопке Cancel (btnCancel)
btnCancel.setOnClickListener(oclBtnCancel);


}

}
[/syntax]
ошибки были в скобках.
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

seeyoul8r
Сообщения: 5
Зарегистрирован: 25 окт 2013, 20:05

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

Сообщение seeyoul8r » 25 окт 2013, 20:46

Всем привет! Тоже взялся за изучение вашего учебника - возник вопрос на этом уроке.

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

package com.example.p0091_onclickbuttons;

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

public class MainActivity extends Activity {
	
	TextView tvOut;
	Button btnOk;
	Button btnCancel;
	

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // Finding View elements. 
        tvOut = (TextView) findViewById(R.id.tvOut);
        btnOk = (Button) findViewById(R.id.btnOk);
        btnCancel = (Button) findViewById(R.id.btnCancel);
        
        
        OnClickListener oclBtnOk = new OnClickListener() {
        	    public void OnClick(View v) {
        	    	tvOut.setText("Pressed Ok");
        	}
    };

        
        btnOk.setOnClickListener(oclBtnOk);
        
    }
    
}
Вот пример кода.
На этой строке вылезает ошибка

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

OnClickListener oclBtnOk = new OnClickListener() {
Multiple markers at this line:
The type new View.OnClick.Listener() {} must implement the inherited abstract method View.OnClick.Listener.OnClick(View).

Не очень понимаю, что он от меня хочет, но сижу лопачу код туда-сюда уже час.

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

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

Сообщение trew » 25 окт 2013, 21:46

[quote="seeyoul8r"][/quote]
Задача на внимательность :)
onClick и OnClick
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

Аватара пользователя
Гагарин
Сообщения: 2
Зарегистрирован: 28 окт 2013, 08:49

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

Сообщение Гагарин » 28 окт 2013, 09:00

Напишу все-таки в этой теме, недаром же она называется "Обработчики событий". Сразу скажу, прочитал эту ветку, и искал поиском в других, но не нашел. Объясните пожалуйста, в чем отличие обработки события OnClick через использование OnClickListener, или через конструкцию android:onClick?

Какая конструкция правильнее? Насколько это принципиально?

Ответить