CheckBox設計及事件響應

整體佈局

<?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();
            }
        });
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章