整體佈局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="同意"
android:id="@+id/tongyi"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#000"/>
<LinearLayout
android:layout_width="match_parent"
android:id="@+id/Linear"
android:layout_height="wrap_content">
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="AA"
android:id="@+id/aa"
/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="BB"
android:id="@+id/bb"
/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="CC"
android:id="@+id/cc"
/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="DD"
android:id="@+id/dd"
/>
</LinearLayout>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn_sub"
android:text="提交"
/>
</LinearLayout>
事件響應處理主要採用匿名內部類的方式
1.主動彙報
//主動彙報
final StringBuffer sbuffer=new StringBuffer();
//拿到所有的子類長度
int cNum = Linear.getChildCount();
for (int i = 0; i < cNum; i++) {
//根據i 拿到每一個CheckBox
final CheckBox cbox= (CheckBox) Linear.getChildAt(i);
cbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
//判斷CheckBox是否被選中
if(b){
if(n==1) {
sbuffer.append("選中");
n=n+1;
}
//把被選中的文字添加到StringBuffer中
sbuffer.append(cbox.getText().toString());
}
else {
sbuffer.delete(sbuffer.indexOf(cbox.getText().toString()),sbuffer.indexOf(cbox.getText().toString())+2);
}
if(!sbuffer.toString().contains("AA")&&!sbuffer.toString().contains("BB")&&!sbuffer.toString().contains("CC")&&!sbuffer.toString().contains("DD")){
sbuffer.delete(sbuffer.indexOf("選中"),sbuffer.indexOf("選中")+2);
n=1;
}
Toast.makeText(MainActivity.this, sbuffer.toString(), Toast.LENGTH_SHORT).show();
}
});
}
//主動彙報簡單的例子
ckOK.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
ckOK.setText("已同意");
}else{
ckOK.setText("同意");
}
}
});
效果
2.被動告知
//被動那個獲知
btn_sub.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
StringBuffer sb=new StringBuffer();
//拿到所有的子類長度
int cNum = Linear.getChildCount();
for (int i = 0; i < cNum; i++) {
//根據i 拿到每一個CheckBox
CheckBox cb= (CheckBox) Linear.getChildAt(i);
//判斷CheckBox是否被選中
if(cb.isChecked()){
//把被選中的文字添加到StringBuffer中
sb.append(cb.getText().toString());
}
}
Toast.makeText(getApplicationContext(), sb.toString(), Toast.LENGTH_SHORT).show();
}
});
效果
3.整體代碼
public class MainActivity extends AppCompatActivity {
int n=1;
private CheckBox ckOK;
private LinearLayout Linear;
private Button btn_sub;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.checkbox);
ckOK= (CheckBox) findViewById(R.id.tongyi);
Linear= (LinearLayout) findViewById(R.id.Linear);
btn_sub= (Button) findViewById(R.id.btn_sub);
//主動彙報
final StringBuffer sbuffer=new StringBuffer();
//拿到所有的子類長度
int cNum = Linear.getChildCount();
for (int i = 0; i < cNum; i++) {
//根據i 拿到每一個CheckBox
final CheckBox cbox= (CheckBox) Linear.getChildAt(i);
cbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
//判斷CheckBox是否被選中
if(b){
if(n==1) {
sbuffer.append("選中");
n=n+1;
}
//把被選中的文字添加到StringBuffer中
sbuffer.append(cbox.getText().toString());
}
else {
sbuffer.delete(sbuffer.indexOf(cbox.getText().toString()),sbuffer.indexOf(cbox.getText().toString())+2);
}
if(!sbuffer.toString().contains("AA")&&!sbuffer.toString().contains("BB")&&!sbuffer.toString().contains("CC")&&!sbuffer.toString().contains("DD")){
sbuffer.delete(sbuffer.indexOf("選中"),sbuffer.indexOf("選中")+2);
n=1;
}
Toast.makeText(MainActivity.this, sbuffer.toString(), Toast.LENGTH_SHORT).show();
}
});
}
//主動彙報簡單的例子
ckOK.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
ckOK.setText("已同意");
}else{
ckOK.setText("同意");
}
}
});
//被動獲知
btn_sub.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
StringBuffer sb=new StringBuffer();
//拿到所有的子類長度
int cNum = Linear.getChildCount();
for (int i = 0; i < cNum; i++) {
//根據i 拿到每一個CheckBox
CheckBox cb= (CheckBox) Linear.getChildAt(i);
//判斷CheckBox是否被選中
if(cb.isChecked()){
//把被選中的文字添加到StringBuffer中
sb.append(cb.getText().toString());
}
}
Toast.makeText(getApplicationContext(), sb.toString(), Toast.LENGTH_SHORT).show();
}
});
}
}