使用Array of ImageButtons告诉哪个是按下的

时间:2016-05-17 10:31:54

标签: java android arraylist imagebutton

我有一个基本的刽子手游戏,并且使用ImageButtons将猜测的按钮全部放在屏幕上(我的工作非常完美)。

我声明图像按钮ID是这样的:

    private static final int[] BUTTON_IDS = {
        R.id.imageButtonA, R.id.imageButtonB, R.id.imageButtonC, R.id.imageButtonD, R.id.imageButtonE,
        R.id.imageButtonF, R.id.imageButtonG, R.id.imageButtonH, R.id.imageButtonI, R.id.imageButtonJ,
        R.id.imageButtonK, R.id.imageButtonL, R.id.imageButtonM, R.id.imageButtonN, R.id.imageButtonO,
        R.id.imageButtonP, R.id.imageButtonQ, R.id.imageButtonR, R.id.imageButtonS, R.id.imageButtonT,
        R.id.imageButtonU, R.id.imageButtonV, R.id.imageButtonW, R.id.imageButtonX, R.id.imageButtonY, R.id.imageButtonZ
    };
    private List<ImageButton> buttonLetters = new ArrayList<ImageButton>();

编辑以显示解决方案:我通过执行以下操作注册了OnClick:

    for (int id: BUTTON_IDS) {
        final ImageButton buttonLettersUsage = (ImageButton)findViewById(id);
        if (buttonLetters != null) {
            assert buttonLettersUsage != null;
            buttonLettersUsage.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(HangmanActivity.this, " " + buttonLettersUsage.getId(), Toast.LENGTH_SHORT).show();
                    switch (buttonLettersUsage.getId()){
                        case R.id.imageButtonQ:
                            strGuessed = "Q";
                            break;
                        case R.id.imageButtonW:
                            strGuessed = "W";
                            break;
                        case R.id.imageButtonE:
                            strGuessed = "E";
                            break;
                        // ... Repeat for rest of buttons ...
                        default:
                            break;
                    }
                    btnGuessClicked(theIncorrectGuesses, theWord);
                    buttonLettersUsage.setVisibility(View.INVISIBLE);
                }
            });
        }
    }

现在问题是,自从实施这部分以来,我一直在研究应用程序,并且所有buttonLettersUsage.getId()已经发生了变化。

我的问题是: 他们会随时改变吗? 我没有在活动中添加任何新组件,为什么它们会改变? 有没有更好的方法来找出按下了哪个按钮,并为strGuessed提供不同的值,具体取决于按下了哪个按钮?

非常感谢。

2 个答案:

答案 0 :(得分:2)

不要在开关案例中使用数字ID,请按如下方式使用。

 switch (buttonLettersUsage.getId()){
                    case R.id.imageButtonA:
                        strGuessed = "Q";
                        break;
                    case R.id.imageButtonB:
                        strGuessed = "W";
                        break;
                    case R.id.imageButtonC:
                        strGuessed = "E";
                        break;
                    // ... Repeat for rest of buttons ...
                    default:
                        break;
                }

也没有像这样实现onClickListener,使用Activity实现View.OnClickListener,然后将侦听器设置为循环

buttonLettersUsage.setOnClickListener(this);

这是您的活动的上下文,它实现了OnClickListener

答案 1 :(得分:0)

YourActivity implements View.OnClickListener{

然后在oncreate(){

// add is buton

View buttonAdd = findViewById(R.id.add);
buttonAdd.setOnClickListener(this);}

then

@Override
public void onClick(View v) {

    switch (v.getId()) {

        case R.id.add:
           {

      }

              break;}