2016-05-17 8 views
0

У меня есть базовая игра для палача, а кнопки, чтобы сделать догадки, размещены на экране с помощью ImageButtons (у меня это прекрасно работает).Скажите, что нажата с помощью массива 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>(); 

Edited показать решение: зарегистрировать их 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 в зависимости от того, какая была нажата?

Большое спасибо.

+0

Почему у вас есть 'case 2131558500:'? – Blackbelt

+0

Вы усложняете ситуацию, используйте gridview. Ваши случаи должны совпадать с идентификаторами кнопок, как в XML, включить этот переключатель - 'switch (view.getId())' – Skynet

+0

2131558500 - это идентификатор для ImageButtonQ, или, по крайней мере, это было. Сейчас 2131558507. – Geoff

ответ

2

Не используйте числовые идентификаторы в случае выключателя использовать его следующим образом.

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, как это, используйте свою активность для реализации View.OnClickListener, а затем установить слушатель в петле, как

buttonLettersUsage.setOnClickListener(this); 

Где это контекст вашей деятельности, которая реализует OnClickListener

0

YourActivity implements View.OnClickListener{

затем в oncreate(){

// добавляемая бутон

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

then 

@Override 
public void onClick(View v) { 

    switch (v.getId()) { 

     case R.id.add: 
      { 

     } 

       break;}