Probleme avec binding

Résolu
CR16_Padawan Messages postés 51 Date d'inscription mercredi 7 juin 2023 Statut Membre Dernière intervention 22 mars 2024 - 29 sept. 2023 à 18:34
CR16_Padawan Messages postés 51 Date d'inscription mercredi 7 juin 2023 Statut Membre Dernière intervention 22 mars 2024 - 7 oct. 2023 à 11:58

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 51 Date d'inscription mercredi 7 juin 2023 Statut Membre Dernière intervention 22 mars 2024
30 sept. 2023 à 21:51

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 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 3 894
2 oct. 2023 à 10:00

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 51 Date d'inscription mercredi 7 juin 2023 Statut Membre Dernière intervention 22 mars 2024
7 oct. 2023 à 11:58

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