Урок 9. Обработчики событий на примере Button.
Re: Урок 9. Обработчики событий на примере Button.
Ребят у меня вопрос:
Я программно создаю кнопки, тут же присваиваю каждой обработчик. При нажатии на любую кнопку, она меняет цвет (на желтый), а при повторном цвет становится прежним (синим) (это работает).
Мне нужно, чтобы при нажатии на другую кнопку, уже нажатая кнопка меняла цвет с желтого на изначальный (Синий).
Как можно при нажатии на одну кнопку (созданную программно) менялись свойства (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]
Вот нажимаются кнопки, а должна быть активной только одна.
Я программно создаю кнопки, тут же присваиваю каждой обработчик. При нажатии на любую кнопку, она меняет цвет (на желтый), а при повторном цвет становится прежним (синим) (это работает).
Мне нужно, чтобы при нажатии на другую кнопку, уже нажатая кнопка меняла цвет с желтого на изначальный (Синий).
Как можно при нажатии на одну кнопку (созданную программно) менялись свойства (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]
Вот нажимаются кнопки, а должна быть активной только одна.
Re: Урок 9. Обработчики событий на примере Button.
можно массив завести под каждую кнопку - один элемент и менять его в зависимости от положения. А можно использовать свойство кнопки tag и записывать ее положение туда, а потом проверять..
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 9. Обработчики событий на примере Button.
Спасибо! Получилось использовать TAG.Foenix писал(а):можно массив завести под каждую кнопку - один элемент и менять его в зависимости от положения. А можно использовать свойство кнопки 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
Re: Урок 9. Обработчики событий на примере Button.
1!!!! сразу говорю так ((v.getTag())==myTag)
строки не сравнивают!!!
UPD: Поспешила, но стирать не буду, не строковое это значение -падает в getTag() а действительно, Object. Его можно пробразовать в строку дописав (у него есть метод) v.getTag().toString(), и тогда это будет строка, и ее нужно правильно сравнить со значением стрковым.
А если хотите его преобразовать в int то можно эту строчку преобразовать, например так:
и при этом обработать исключение (вдруг там не int?)
И тогда уже это значение можешь использовать в switch
Кстати, вот когда пишешь калькулятор - туда удобно записать именно то число, которое обозначает кнопка, чтоб сразу его заносить безо всяких преобразований в EditText, посмотри, может быть и тебе удобно туда не абстрактное число заносить, а тот же номер цвета? Ну это как уж по логике программы.
Вообще т.к. это объект, туда по сути можно любой тип запихнуть, создать пользовательский массив, занести туда цвета и прочее..
строки не сравнивают!!!
UPD: Поспешила, но стирать не буду, не строковое это значение -падает в getTag() а действительно, Object. Его можно пробразовать в строку дописав (у него есть метод) v.getTag().toString(), и тогда это будет строка, и ее нужно правильно сравнить со значением стрковым.
А если хотите его преобразовать в int то можно эту строчку преобразовать, например так:
Код: Выделить всё
Integer.parseInt((String) v.getTag());
И тогда уже это значение можешь использовать в switch
Кстати, вот когда пишешь калькулятор - туда удобно записать именно то число, которое обозначает кнопка, чтоб сразу его заносить безо всяких преобразований в EditText, посмотри, может быть и тебе удобно туда не абстрактное число заносить, а тот же номер цвета? Ну это как уж по логике программы.
Вообще т.к. это объект, туда по сути можно любой тип запихнуть, создать пользовательский массив, занести туда цвета и прочее..
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 9. Обработчики событий на примере Button.
Так ты девушка ?!!!! КрутоFoenix писал(а):1!!!! сразу говорю так ((v.getTag())==myTag)
строки не сравнивают!!!
UPD: Поспешила, но стирать не буду, не строковое это значение -падает в getTag() а действительно, Object. Его можно пробразовать в строку дописав (у него есть метод) v.getTag().toString(), и тогда это будет строка, и ее нужно правильно сравнить со значением стрковым.
А если хотите его преобразовать в int то можно эту строчку преобразовать, например так:и при этом обработать исключение (вдруг там не int?)Код: Выделить всё
Integer.parseInt((String) v.getTag());
И тогда уже это значение можешь использовать в switch
Кстати, вот когда пишешь калькулятор - туда удобно записать именно то число, которое обозначает кнопка, чтоб сразу его заносить безо всяких преобразований в EditText, посмотри, может быть и тебе удобно туда не абстрактное число заносить, а тот же номер цвета? Ну это как уж по логике программы.
Вообще т.к. это объект, туда по сути можно любой тип запихнуть, создать пользовательский массив, занести туда цвета и прочее..
Спасибо за ответ. Думаю все получится. К слову, планировалось, что это будет Сапер . Просто пока не добавил остальные кнопки)
Вашим способом не получилось (тут я наверно идиот). Получилось так:
int docId = (Integer)v.getTag();
Re: Урок 9. Обработчики событий на примере Button.
почему? это просто оператор приведения к типу, но это ставится в том случае, если у тебя в объекте сто 100% целое число записано.
А раз ты туда целое записал.. то так тоже можно.
А раз ты туда целое записал.. то так тоже можно.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 9. Обработчики событий на примере Button.
Получается вот такой экранчик. Вроде все работает. Но мне не нравится, что эмулятор думает где то секунду перед тем как все эти кнопки создать. Не знаете как можно облегчить это дело?)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 раз.
Re: Урок 9. Обработчики событий на примере Button.
эмулятор????
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 9. Обработчики событий на примере Button.
Ну я не знаю как называется эта штукаFoenix писал(а):эмулятор????
p.s. ахахахах, там есть еще страничка перед этой, с которой уже вызывается эта и создаются кнопки)
Re: Урок 9. Обработчики событий на примере Button.
да забей, все у тебя красиво получилось
Эмулятор - крайне медленная штука, ты не представляешь сколько времени я жду пока он что-то сделает
на устройстве все летать будет
Эмулятор - крайне медленная штука, ты не представляешь сколько времени я жду пока он что-то сделает
на устройстве все летать будет
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 9. Обработчики событий на примере Button.
Ладно, вот еще просьба:
Кто-нибудь может привести пример использования этого метода ?
или просто объяснить коротко)
вот этого:
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)
Кто-нибудь может привести пример использования этого метода ?
или просто объяснить коротко)
вот этого:
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)
Re: Урок 9. Обработчики событий на примере Button.
Спасибо! Проблемы не было, просто я не знал такого понятия, как анонимный внутренний класс, и подобная форма создания экземпляра была для меня непонятной.по-моему, мы создаем экземпляр анонимного внутреннего класса (реализующего интерфейс), который записываем в переменную oclBtnOk.
Только не поняла в чем именно проблема-то..
Re: Урок 9. Обработчики событий на примере Button.
Изучаю программирование на 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]
не хочет работать
[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);
Re: Урок 9. Обработчики событий на примере Button.
Код: Выделить всё
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");
}
} ;
Re: Урок 9. Обработчики событий на примере Button.
Что я делаю не так?
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);
}
}
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);
}
}
Re: Урок 9. Обработчики событий на примере Button.
подведи курсор к красному, там будет написана ошибка
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 9. Обработчики событий на примере Button.
[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]
ошибки были в скобках.
Рабочий вариант:
[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.
Свои сообщения можно редактировать - кнопка edit.
Re: Урок 9. Обработчики событий на примере Button.
Всем привет! Тоже взялся за изучение вашего учебника - возник вопрос на этом уроке.
Вот пример кода.
На этой строке вылезает ошибка
Multiple markers at this line:
The type new View.OnClick.Listener() {} must implement the inherited abstract method View.OnClick.Listener.OnClick(View).
Не очень понимаю, что он от меня хочет, но сижу лопачу код туда-сюда уже час.
Код: Выделить всё
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() {
The type new View.OnClick.Listener() {} must implement the inherited abstract method View.OnClick.Listener.OnClick(View).
Не очень понимаю, что он от меня хочет, но сижу лопачу код туда-сюда уже час.
Re: Урок 9. Обработчики событий на примере Button.
[quote="seeyoul8r"][/quote]
Задача на внимательность
onClick и OnClick
Задача на внимательность
onClick и OnClick
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.
Свои сообщения можно редактировать - кнопка edit.
Урок 9. Обработчики событий на примере Button.
Напишу все-таки в этой теме, недаром же она называется "Обработчики событий". Сразу скажу, прочитал эту ветку, и искал поиском в других, но не нашел. Объясните пожалуйста, в чем отличие обработки события OnClick через использование OnClickListener, или через конструкцию android:onClick?
Какая конструкция правильнее? Насколько это принципиально?
Какая конструкция правильнее? Насколько это принципиально?