Попытка изменить фон кнопки с помощью оператора if - PullRequest
0 голосов
/ 08 декабря 2011

Пытаясь создать игру, в которой дети будут гоняться за мрамором.Я хочу, чтобы фон кнопок менялся, только если фон другой кнопки равен чему-либо.Но не могу получить onclick с оператором if, чтобы работать.Вот код, который у меня сейчас есть.

package test.tablet.design;

import java.text.DateFormat;
import java.util.Date;
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 MarbleGame extends Activity {

private Button btnA1mc; private Button btnA2mc; private Button btnA3mc; private Button btnA4mc; private Button btnB1mc; private Button btnB2mc; private Button btnB3mc; private Button btnB4mc;
private Button btnC1mc; private Button btnC2mc; private Button btnC3mc; private Button btnC4mc; private Button btnD1mc; private Button btnD2mc; private Button btnD3mc; private Button btnD4mc;
private Button btnE1mc; private Button btnE2mc; private Button btnE3mc; private Button btnE4mc; private Button btnF1mc; private Button btnF2mc; private Button btnF3mc; private Button btnF4mc;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.marble_chase);
    TextView tv_time = (TextView) findViewById(R.id.tv_time);
    String currenttime = DateFormat.getDateTimeInstance().format(new Date());
    tv_time.setText(currenttime);

    btnA1mc = (Button)findViewById(R.id.btnA1mc); btnA2mc = (Button)findViewById(R.id.btnA2mc); btnA3mc = (Button)findViewById(R.id.btnA3mc); btnA4mc = (Button)findViewById(R.id.btnA4mc);
    btnB1mc = (Button)findViewById(R.id.btnB1mc); btnB2mc = (Button)findViewById(R.id.btnB2mc); btnB3mc = (Button)findViewById(R.id.btnB3mc); btnB4mc = (Button)findViewById(R.id.btnB4mc);
    btnC1mc = (Button)findViewById(R.id.btnC1mc); btnC2mc = (Button)findViewById(R.id.btnC2mc); btnC3mc = (Button)findViewById(R.id.btnC3mc); btnC4mc = (Button)findViewById(R.id.btnC4mc);
    btnD1mc = (Button)findViewById(R.id.btnD1mc); btnD2mc = (Button)findViewById(R.id.btnD2mc); btnD3mc = (Button)findViewById(R.id.btnD3mc); btnD4mc = (Button)findViewById(R.id.btnD4mc);
    btnE1mc = (Button)findViewById(R.id.btnE1mc); btnE2mc = (Button)findViewById(R.id.btnE2mc); btnE3mc = (Button)findViewById(R.id.btnE3mc); btnE4mc = (Button)findViewById(R.id.btnE4mc);
    btnF1mc = (Button)findViewById(R.id.btnF1mc); btnF2mc = (Button)findViewById(R.id.btnF2mc); btnF3mc =    (Button)findViewById(R.id.btnF3mc); btnF4mc = (Button)findViewById(R.id.btnF4mc);

    btnE2mc.setOnClickListener(new OnClickListener()
      {
          @Override
          public void onClick(View v)
          {
              btnE2mc.setBackgroundResource(R.drawable.marble_x);
              btnB4mc.setBackgroundResource(R.drawable.marble);
          }
      });
    btnB4mc.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            if (btnE2mc.equals(getResources().getDrawable(R.drawable.marble_x)))
            {
            btnB4mc.setBackgroundResource(R.drawable.marble_x);
            btnC1mc.setBackgroundResource(R.drawable.marble);
            }
            else{}
        }
    });
    btnC1mc.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            if (btnB4mc.equals(getResources().getDrawable(R.drawable.marble_x)))
            {
            btnC1mc.setBackgroundResource(R.drawable.marble_x);
            btnF1mc.setBackgroundResource(R.drawable.marble);
            }
            else{}
        }
    });
}

}

Ответы [ 2 ]

0 голосов
/ 08 декабря 2011

Вы пытаетесь сравнить объект Button с объектом Drawable, который всегда будет возвращать значение false.

Вместо этого вы можете использовать View.setTag () для отслеживания состояния каждой отдельной кнопки. С тегом (именованным или неназванным) вы можете связать произвольные данные с отдельным представлением. В приведенном ниже примере автобокс используется для преобразования логических значений в логические.

if ((Boolean)btn1.getTag()) {
  btn1.setTag(false);
  btn2.setTag(true);
  // TODO actual background swapping
}

Для удобства чтения и уменьшения дублирования может потребоваться использовать вспомогательную функцию, которая может заменить вас, и в качестве аргументов она будет принимать две кнопки.

0 голосов
/ 08 декабря 2011

Внутренний boolean будет иметь значение true при каждом нажатии кнопки и изменении фона.

boolean isBackgroundChanged = false;

При каждом нажатии кнопки вы меняете фон и устанавливаете isBackgroundChangedtrue.И тогда вместо того, чтобы делать:

btnB4mc.equals(getResources().getDrawable(R.drawable.marble_x)

вы бы получили

if(isBackgroundChanged)...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...