2017-03-03 130 views
0

我有10個複選框,我想在選中最多6個複選框後禁用剩下的複選框。如何在選中多個複選框後禁用複選框?

如何使用OnCheckChangedListener來解決問題。

如果我寫的代碼如下,我需要重複10次

checkbox1.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

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

我應該怎麼做,以減少冗餘代碼?

+0

你需要保持布爾檢查是否列表複選框是否被選中。 – UserSharma

+0

@UserSharma我能舉個例子嗎?我是一個新手,在創建一個類之後我不太明白 – hatched

回答

0

您可以創建一個名爲類而不是匿名類:

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--;    
     } 
    } 
} 

或者你可以在你的活動實現的接口:

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

,那麼我只是在我的活動中實現該功能? – hatched

+0

我不確定你在問什麼。但是,我例舉的方法是[嵌套類](https://www.tutorialspoint.com/java/java_innerclasses.htm)。如你所說,你也可以在你的活動中實現這個監聽器。在這種情況下,您可以使用'checkbox1.setOnCheckedChangeListener(this)',您的活動將使用'onCheckedChanged'方法。 – BMacedo

+0

謝謝,我會嘗試一下 – hatched