2017-03-03 1 views
0

Ich habe 10 Checkboxen und ich möchte das verbleibende Kontrollkästchen deaktivieren, nachdem maximal 6 Checkboxen ausgewählt wurden.Wie deaktiviere ich Kontrollkästchen, nachdem eine Anzahl von Kontrollkästchen ausgewählt wurde?

Wie verwende ich OnCheckChangedListener, um das Problem zu lösen.

Wenn ich den Code wie unten schreiben, muss ich es 10-mal wiederholen

checkbox1.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

@Override 
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
    if (isChecked && numberOfCheckboxesChecked >= 6) { 
     checkbox1.setChecked(false); 
    } else { 
    } 
}}; 

Wie soll ich redundanten Code zu reduzieren tun?

+0

Sie müssen eine Liste von boolean halten zu prüfen, ob Kontrollkästchen ist ausgewählt oder nicht. – UserSharma

+0

@UserSharma kann ich ein Beispiel haben? Ich bin ein Neuling, ich verstehe nicht wirklich – hatched

Antwort

0

Sie können eine benannte Klasse statt einer anonymen Klasse erstellen:

checkbox1.setOnCheckedChangeListener(new MyCheckboxChangeListener()); 
checkbox2.setOnCheckedChangeListener(new MyCheckboxChangeListener()); 
... 

private static class MyCheckboxChangeListener implements OnCheckedChangeListener { 

    private static int numberOfCheckboxesChecked; 

    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     if (isChecked) { 
      if (numberOfCheckboxesChecked >= 6) { 
       buttonView.setChecked(false); 
      } else { 
       numberOfCheckboxesChecked++; 
      } 
     } else { 
      numberOfCheckboxesChecked--;    
     } 
    } 
} 

Oder Sie können die Schnittstelle in Ihrer Aktivität implementieren:

public class MainActivity extends AppCompatActivity implements OnCheckedChangeListener { 

    ... 
    private int numberOfCheckboxesChecked; 
    ... 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     ... 
     checkbox1.setOnCheckedChangeListener(this); 
     checkbox2.setOnCheckedChangeListener(this); 
    } 

    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     if (isChecked) { 
      if (numberOfCheckboxesChecked >= 6) { 
       buttonView.setChecked(false); 
      } else { 
       numberOfCheckboxesChecked++; 
      } 
     } else { 
      numberOfCheckboxesChecked--;    
     } 
    } 

} 
+0

, nachdem ich eine Klasse erstellen, dann implementiere ich nur die Funktion in meiner Tätigkeit ?? – hatched

+0

Ich bin mir nicht sicher, was Sie fragen. Der von mir veranschaulichte Ansatz ist jedoch eine [geschachtelte Klasse] (https://www.tutorialspoint.com/java/java_innerclasses.htm). Wie Sie bereits gesagt haben, können Sie diesen Listener auch in Ihrer Aktivität implementieren. In diesem Fall würden Sie "checkbox1.setOnCheckedChangeListener (this)" verwenden und Ihre Aktivität würde die Methode "onCheckedChanged" haben. – BMacedo

+0

danke, ich werde es versuchen – hatched

Verwandte Themen