Probleme avec binding

Résolu
CR16_Padawan Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   -  
CR16_Padawan Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   -

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


2 réponses

CR16_Padawan Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   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
BunoCS Messages postés 15952 Date d'inscription   Statut Modérateur Dernière intervention   3 918
 

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
CR16_Padawan Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   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