Probleme avec binding

Résolu

Bonjour,

je rencontre un petit soucis lorsque je lance mon appli. Cette dernière se ferme lorsque je click sur le radio Button.

Pour info je récupère le nom du radio Button sélectionné dans un textview (binding.iCTxtview8).

RadioGroup radioGroup;
RadioButton radioButton;

private ActivityPageTwoBinding binding;
private PreferenceManager preferenceManager;
private String encodedImage; 

TextView txtWiew1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
 
    radioGroup = findViewById(R.id.i_c_RadioGroup); 
    txtWiew1 = findViewById(R.id.i_c_Txtview1);

    binding = ActivityPageTwoBinding.inflate(getLayoutInflater());
    View view = binding.getRoot();
    setContentView(view);

    //setContentView(binding.getRoot());*/
    preferenceManager = new PreferenceManager(getApplicationContext());
    setListener();
}

////////////////// RADIOBUTTONS//////////////////////////////

public void checkButton (View v){
    int radioId = radioGroup.getCheckedRadioButtonId();

    radioButton = findViewById(radioId);
    txtWiew1.setText(radioButton.getText());
    //Toast.makeText(this, "bouton selectionné: " + radioButton.getText(), Toast.LENGTH_SHORT).show();

}

private void setListener() {
    
    binding.iCBtnSuivant.setOnClickListener(v -> {
        if (isValidFields()) {
            // saving();
        }

    });
   }

private boolean isValidFields() {

    if (binding.iCEditext1.getText().toString().trim().isEmpty()) {
        Toast.makeText(getApplicationContext(), "xxx", Toast.LENGTH_SHORT).show();
        return false;
    } else if (binding.iCEditext2.getText().toString().trim().isEmpty()) {
        Toast.makeText(getApplicationContext(), "xxx", Toast.LENGTH_SHORT).show();
        return false;
    } else if (binding.iCEditext3.getText().toString().trim().isEmpty()) {
        Toast.makeText(getApplicationContext(), "xxx", Toast.LENGTH_SHORT).show();
        return false;
    } else if (binding.iCEditext4.getText().toString().trim().isEmpty()) {
        Toast.makeText(getApplicationContext(), "xxx", Toast.LENGTH_SHORT).show();
        return false;
    } else if (binding.iCEditext5.getText().toString().trim().isEmpty()) {
        Toast.makeText(getApplicationContext(), "xxx", Toast.LENGTH_SHORT).show();
        return false;
    } else if (binding.iCEditext6.getText().toString().trim().isEmpty()) {
        Toast.makeText(getApplicationContext(), "xxx", Toast.LENGTH_SHORT).show();
        return false;
    } else if (binding.iCEditext7.getText().toString().trim().isEmpty()) {
        Toast.makeText(getApplicationContext(), "xxx", Toast.LENGTH_SHORT).show();
        return false;
    } else if (binding.iCTxtview8.getText().toString().trim().isEmpty()) {
        Toast.makeText(getApplicationContext(), "xxx", Toast.LENGTH_SHORT).show();
        return false;
    } else if (encodedImage == null) {
        Toast.makeText(getApplicationContext(), "xxx", Toast.LENGTH_SHORT).show();
        return false;
    } else {
        return true;
    }

}

Merci par avance pour vos suggestions.


Windows / Edge 117.0.2045.43


CR16_Padawan

2 réponses

  1. bonsoir,

    j'ai reçu la solution de la part de l'IA.

    voici la réponse:

    Il est possible que l'erreur vienne du fait que tu tentes d'accéder à ton radioGroup ou radioButton avant qu'il soit initialisé. Essaie de déplacer ta ligne `radioGroup = findViewById(R.id.i_c_RadioGroup);` après `setContentView(view);`. De plus, assure-toi que l'ID fourni pour `findViewById` est bien présent dans ton fichier XML de layout. Cela pourrait être à l'origine du problème.

    Réponse générée par IA le 30/09/2023

    bonne soirée


    0
    1. Modérateur

      Hello,

      Alors oui, la réponse de l'IA est techniquement correcte.

      Après, tu n'utilises pas le binding correctement. Tu n'as plus besoin de findViewById() pour récupérer des vues car tu peux récupérer directement tes composants graphiques à partir de leur ID, après avoir initialiser le binding, de la manière suivante:

      private ActivityPageTwoBinding binding;
      private PreferenceManager preferenceManager;
      private String encodedImage; 
      
      
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
       
          binding = ActivityPageTwoBinding.inflate(getLayoutInflater());
          View view = binding.getRoot();
          setContentView(view);
      
          //setContentView(binding.getRoot());*/
          preferenceManager = new PreferenceManager(getApplicationContext());
          setListener();
      }
      
      ////////////////// RADIOBUTTONS//////////////////////////////
      
      public void checkButton (View v){
          int radioId = binding.radioGroup.getCheckedRadioButtonId();
      
          radioButton = findViewById(radioId);
          binding.txtWiew1.setText(radioButton.getText());
          //Toast.makeText(this, "bouton selectionné: " + radioButton.getText(), Toast.LENGTH_SHORT).show();
      
      }
      

      0
      1. bonjour BrunoCS

        merci pour ton intervention et désolé pour ce délai de réponse.

        Je vais essayer de me pencher sur la bonne manière d'utiliser Binding.

        En tout cas ça fonctionne maintenant.

        à plus.

        0