Почему кнопка, добавленная динамически, не получает входные данные?

#java #android

#java #Android

Вопрос:

Я разрабатывал приложение, которое представляет собой простую карточную игру, и я добавил кнопку динамическим способом в представлении, которая представляет карту игры, но эта кнопка не получает никакого ввода при ее нажатии. Вопрос в том, почему кнопка не получает никаких входных данных?

Я уже пытался использовать журнал для печати сообщения, но ничего не печатается.

 public class MainActivity extends AppCompatActivity {

private Banco banco;

private Giocatore giocatore1;
private Giocatore giocatore2;
private Giocatore giocatoreAttuale;


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

    giocatore1 = new GiocatoreUmano();
    giocatore2 = new GiocatoreUmano();

    banco = new Banco(giocatore1,giocatore2);
    giocatoreAttuale=giocatore1;
    DaiCarteAiGiocatori();
    DaiCarteAlPlayerOne();
}

private void DaiCarteAlPlayerOne(){

    Button primaCarta = new Button(this);  //BUTTON OF THE CARD
    primaCarta.setText(giocatore1.getCartaByIndex(0).getSeme().toString() ":" giocatore1.getCartaByIndex(0).getValore());

    ConstraintLayout layout = findViewById(R.id.baseLayout);
    layout.addView(primaCarta);

      Animation animation = AnimationUtils.loadAnimation(this, R.anim.move_cards); // THE ANIMATION
      primaCarta.startAnimation(animation);

//when the button is pressed the log should print the message of the card

     primaCarta.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            banco.giocaCarte(giocatore1,giocatore1.getCartaByIndex(0));
            Log.i("CARTA","Carta Premuta");
        }
    });


}
private void DaiCarteAiGiocatori(){
    banco.pescaCarte();
}
 

}

Спасибо за помощь.

Комментарии:

1. Реализуйте OnClickListener «открытый класс MainActivity расширяет AppCompatActivity {» затем выполните «primaCarta .setOnClickListener(this);»

Ответ №1:

смотрите Мои изменения в трех местах, прокомментированных //!!!

    public class MainActivity extends AppCompatActivity implements View.OnClickListener { //!!!

    private Banco banco;

    private Giocatore giocatore1;
    private Giocatore giocatore2;
    private Giocatore giocatoreAttuale;


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

        giocatore1 = new GiocatoreUmano();
        giocatore2 = new GiocatoreUmano();

        banco = new Banco(giocatore1,giocatore2);
        giocatoreAttuale=giocatore1;
        DaiCarteAiGiocatori();
        DaiCarteAlPlayerOne();
    }

    private void DaiCarteAlPlayerOne(){

        Button primaCarta = new Button(this);  //BUTTON OF THE CARD
        primaCarta.setOnClickListener(MainActivity.this); //!!!
    primaCarta.setText(giocatore1.getCartaByIndex(0).getSeme().toString() ":" giocatore1.getCartaByIndex(0).getValore());

        ConstraintLayout layout = findViewById(R.id.baseLayout);
        layout.addView(primaCarta);

          Animation animation = AnimationUtils.loadAnimation(this, R.anim.move_cards); // THE ANIMATION
          primaCarta.startAnimation(animation);



    }

    //!!!
    @Override
        public void onClick(View v) {
     banco.giocaCarte(giocatore1,giocatore1.getCartaByIndex(0));
                Log.i("CARTA","Carta Premuta");
        }

    private void DaiCarteAiGiocatori(){
        banco.pescaCarte();
    }