2017-10-12 1 views
2

J'ai 4 cases à cocher lorsque je coche une, deux ou plus. Je veux remplir mon spinner avec des valeurs, 1-5 si la case 1 est cochée, 6-10 si la case 2 est cochée, etc. J'ai cette logique ici.Populate Spinner

public void populateSpinnerToothNumber() { 
    if (cbQuadrant1.isChecked()) { 
     ArrayList<String> toothNumber = new ArrayList<>(); 
     toothNumber.add("1"); 
     toothNumber.add("2"); 
     toothNumber.add("3"); 
     toothNumber.add("4"); 
     toothNumber.add("5"); 

     ArrayAdapter<String> stringArrayAdapter = new ArrayAdapter<>(this, R.layout.support_simple_spinner_dropdown_item, toothNumber); 
     spinnerToothNumber.setAdapter(stringArrayAdapter); 
    } else if (cbQuadrant2.isChecked()) { 

    } else if (cbQuadrant3.isChecked()) { 

    } else if (cbQuadrant4.isChecked()) { 

    } else if (cbQuadrant1.isChecked() && cbQuadrant2.isChecked()) { 
     ArrayList<String> toothNumber = new ArrayList<>(); 
     toothNumber.add("1"); 
     toothNumber.add("2"); 
     toothNumber.add("3"); 
     toothNumber.add("4"); 
     toothNumber.add("5"); 
     toothNumber.add("6"); 
     toothNumber.add("7"); 
     toothNumber.add("8"); 
     toothNumber.add("9"); 
     toothNumber.add("10"); 

     ArrayAdapter<String> stringArrayAdapter = new ArrayAdapter<>(this, R.layout.support_simple_spinner_dropdown_item, toothNumber); 
     spinnerToothNumber.setAdapter(stringArrayAdapter); 
    } 
} 

Comment puis-je améliorer la logique?

MISE À JOUR

public void populateSpinnerToothNumber() { 
    final ArrayList<String> toothNumber = new ArrayList<>(); 

    cbQuadrant1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton compoundButton, boolean b) { 
      for (int x = 1; x <= 5; x++) { 
       toothNumber.add(String.valueOf(x)); 
      } 
     } 
    }); 

    cbQuadrant2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton compoundButton, boolean b) { 
      for (int x = 6; x <= 10; x++) { 
       toothNumber.add(String.valueOf(x)); 
      } 
     } 
    }); 

    cbQuadrant3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton compoundButton, boolean b) { 
      for (int x = 11; x <= 15; x++) { 
       toothNumber.add(String.valueOf(x)); 
      } 
     } 
    }); 

    cbQuadrant4.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton compoundButton, boolean b) { 
      for (int x = 16; x <= 20; x++) { 
       toothNumber.add(String.valueOf(x)); 
      } 
     } 
    }); 

    ArrayAdapter<String> stringArrayAdapter = new ArrayAdapter<String>(this, R.layout.support_simple_spinner_dropdown_item, toothNumber); 
    spinnerToothNumber.setAdapter(stringArrayAdapter); 
} 

Cette résolu le problème :) Infogérance avec checkbox.setOnCheckedChangeListener Merci de nous aider! :)

Répondre

1

vous devez utiliser OnCheckedChangeListener

définition Interface pour un rappel à invoquer lorsque l'état coché d'un bouton composé modifié.

exemple de code

checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if (isChecked) { 
       ArrayList<String> toothNumber = new ArrayList<>(); 
       toothNumber.add("1"); 
       toothNumber.add("2"); 
       toothNumber.add("3"); 
       toothNumber.add("4"); 
       toothNumber.add("5"); 
       ArrayAdapter<String> stringArrayAdapter = new ArrayAdapter<>(this, R.layout.support_simple_spinner_dropdown_item, toothNumber); 
       spinnerToothNumber.setAdapter(stringArrayAdapter); 
      } 
      } 
     } 
    ); 

    checkBox2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if (isChecked) { 
       ArrayList<String> toothNumber = new ArrayList<>(); 
       toothNumber.add("1"); 
       toothNumber.add("2"); 
       toothNumber.add("3"); 
       toothNumber.add("4"); 
       toothNumber.add("5"); 
       toothNumber.add("6"); 
       toothNumber.add("7"); 
       toothNumber.add("8"); 
       toothNumber.add("9"); 
       toothNumber.add("10"); 
       ArrayAdapter<String> stringArrayAdapter = new ArrayAdapter<>(this, R.layout.support_simple_spinner_dropdown_item, toothNumber); 
        spinnerToothNumber.setAdapter(stringArrayAdapter); 
               } 
              } 
             } 
    ); 
+0

Que faire si les cases à cocher 1 et 2 sont cochées? Ou que faire si les cases à cocher 1 et 3 sont cochées? –

+0

vous devez gérer toute la case à cocher changé auditeur pour que mon ci-dessus et est juste le code de l'extrait pour vous guider maintenant, vous pouvez gérer toute l'écouteur changé de case selon votre condition @KyleAnthonyDizon –

+0

Oh, d'accord d'accord. Je vais essayer d'améliorer la logique en ce moment. Merci mon pote! –

2

Ajout dans @Nilesh Rathod. Vous pouvez avoir une méthode comme populateSpinner (int bgCount, int Endcount) qui prend dans la quantité de nombre de dents nécessaires de la gamme de début à la fin.

private void populateSpinner (int bgCount, int Endcount) { 
    ArrayList<String> toothNumber = new ArrayList<>(); 
    for (int i = bgCount; i < Endcount; i++) { 
      toothNumber.add(i); 
    } 
    ArrayAdapter<String> stringArrayAdapter = new ArrayAdapter<>(this, R.layout.support_simple_spinner_dropdown_item, toothNumber); 
    spinnerToothNumber.setAdapter(stringArrayAdapter); 
} 

Appelez la méthode comme dans vos cases à cocher OnCheckedChangeListener. populateSpinner (1, 5);