iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 12
0
Mobile Development

Android開發系列 第 12

[Day12]簡單的CheckBox(複選)

  • 分享至 

  • xImage
  •  

哈囉大家好今天一樣會來示範CheckBox的用法,那今天會示範CheckBox複選要怎麼做出來,廢話不多說一樣先上程式碼。

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <CheckBox
        android:id="@+id/checkBox1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="A選項"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <CheckBox
        android:id="@+id/checkBox2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="B選項"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/checkBox1" />

    <CheckBox
        android:id="@+id/checkBox3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="C選項"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/checkBox2" />

    <CheckBox
        android:id="@+id/checkBox4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="D選項"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/checkBox3" />

    <CheckBox
        android:id="@+id/checkBox5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="E選項"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/checkBox4" />

    <Button
        android:id="@+id/btn_send"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:text="送出"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/btn_allChoose" />

    <Button
        android:id="@+id/btn_allChoose"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"

        android:layout_marginTop="12dp"
        android:text="全選"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/checkBox5" />

    <Button
        android:id="@+id/btn_allNotChoose"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="12dp"
        android:text="全不選"
        app:layout_constraintStart_toEndOf="@+id/btn_allChoose"
        app:layout_constraintTop_toBottomOf="@+id/checkBox5" />
</androidx.constraintlayout.widget.ConstraintLayout>

我來解釋一下我的佈局,一開始我先新增了A~E選項一共五個CheckBox,然後再新增了三個按鈕分別是"全選"、"全不選"和"送出",全選的功能是會將全部的CheckBox勾起來,反之全不選的則是將全部的CheckBox取消勾選,而送出按鈕的功能是會檢查有哪些CheckBox有被勾選並且彈出一個Toast來告訴使用者。

MainActivity

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    CheckBox ch;
    Button btnSend,btnAllChoose,btnAllNotChoose;
    String msg="";
    int[] id = {R.id.checkBox1, R.id.checkBox2, R.id.checkBox3, R.id.checkBox4, R.id.checkBox5};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnSend = findViewById(R.id.btn_send);
        btnSend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Boolean check = false;
                msg = "";
                for (int i:id){
                    ch = findViewById(i);
                    if (ch.isChecked()) {
                        check = true;
                        msg += "\n" + ch.getText();
                    }
                }
                if (check == true){
                    Toast.makeText(getApplicationContext(),"您選擇的選項有:"+msg,Toast.LENGTH_SHORT).show();
                }else {
                    Toast.makeText(getApplicationContext(),"您沒有選擇任何選項,請重新選取後再送出",Toast.LENGTH_SHORT).show();
                }
            }
        });
        btnAllChoose = findViewById(R.id.btn_allChoose);
        btnAllChoose.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                for (int i:id){
                    ch = findViewById(i);
                    ch.setChecked(true);
                }
            }
        });

        btnAllNotChoose = findViewById(R.id.btn_allNotChoose);
        btnAllNotChoose.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                for (int i:id){
                    ch = findViewById(i);
                    ch.setChecked(false);
                }
            }
        });
    }
}

在程式碼裡int[] id來裝取checkBox的id,然後在按下送出按鈕時會使用迴圈讓他可以輪流掃描每一個CheckBox,當檢查到有CheckBox被勾選時會將該CheckBox的名稱加入msg字串裡面,最後當每一個checkBox檢查完時會將msg使用Toast來讓使用者了解到有哪一些CheckBox被選擇到,在這裡我也有做一個小小的防呆機制,當沒有CheckBox沒有被勾選就按下送出按鈕時會彈出一個Toast來通知使用者。

那今天就示範得差不多了,謝謝大家的觀看。


上一篇
[Day11] 簡單的CheckBox(單選)
下一篇
[Day13]簡單的RadioButton
系列文
Android開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言