Android: Alert Dialog trong Android

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Một Dialog là một cửa sổ nhỏ gợi ý người dùng đưa ra quyết định hoặc nhập thông tin bổ sung.

Đôi khi trong ứng dụng của mình, có thể bạn muốn yêu cầu người dùng lựa chọn quyết định 'có' hoặc 'không' để phản hồi bất cứ action cụ thể nào nhưng vẫn giữ nguyên Activity và không thay đổi màn hình hiện tại, khi này bạn có thể sử dụng đến Alert Dialog.

Để tạo một Alert Dialog, bạn cần tạo một đối tượng AlertDialogBuilder, đây là lớp nội bộ của AlertDialog. Cú pháp như sau:

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);

Sau đó bạn phải thiết lập nút 'có' hoặc 'không' bằng sử dụng các phương thức sau của đối tượng lớp AlertDialogBuilder:

alertDialogBuilder.setPositiveButton(CharSequence text, DialogInterface.OnClickListener listener)
alertDialogBuilder.setNegativeButton(CharSequence text, DialogInterface.OnClickListener listener)

Ngoài những phương thức này, bạn có thể sử dụng các phương thức được cung cấp bởi lớp Builder để tùy chỉnh Alert Dialog của mình. Bảng dưới đây liệt kê các phương thức này:

Stt Phương thức type & Miêu tả
1 setIcon(Drawable icon)

Phương thức này thiết lập icon của Alert Dialog

2 setCancelable(boolean cancel able)

Phương thức này thiết lập thuộc tính mà Dialog là bị cancel hoặc không

3 setMessage(CharSequence message)

Phương thức này thiết lập thông điệp để được hiển thị trong Alert Dialog

4 setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems, DialogInterface.OnMultiChoiceClickListener listener)

Phương thức này thiết lập danh sách item để được hiển thị trong Dialog. Tùy chọn sẽ được thông báo bởi Listener

5 setOnCancelListener(DialogInterface.OnCancelListener onCancelListener)

Phương thức này thiết lập hàm callback sẽ được gọi nếu Dialog bị cancel

6 setTitle(CharSequence title)

Phương thức này thiết lập Title xuất hiện trong Dialog

Sau khi tạo và thiết lập Dialog Builder, ta sẽ tạo một Alert Dialog xuất hiện trên màn hình điện thoại bằng cách gọi phương thức create() của lớp Builder đó. Cú pháp như sau:

AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();

Dialog Fragment

Trước khi đi vào một ví dụ cụ thể, chúng ta cần biết về Dialog Fragment. Dialog Frament là một Fragment mà có thể hiển thị fragment trong hộp thoại Dialog.

public class DialogFragment extends DialogFragment {
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // S dng lp Builder đ d dàng hơn khi to hp thoi
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setPositiveButton(R.string.fire, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                toast.makeText(this,"enter a text here",Toast.LENTH_SHORT).show();
            }
        })
                .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        finish();
                    });
                    // To đi tượng AlertDialog và tr nó v nơi gi
         return builder.create();
                }
    }
}

List dialog

List dialog được sử dụng để hiển thị danh sách các mục trong một Dialog. Giả sử người dùng cần lựa chọn một item từ danh sách hoặc cần click vào item từ danh sách. Lúc này ta có thể sử dụng List Dialog như sau:

public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setTitle(Pick a Color)

            .setItems(R.array.colors_array, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    // Đi s 'which' cha v trí theo ch s ca ca mc được chn
                }
            });
    return builder.create();
}

List Dialog dạng Single-choice

Dạng single-choice được sử dụng để thêm một danh sách dạng single-choice tới hộp Dialog. Chúng ta có thể kiểm tra hoặc không kiểm tra mỗi lựa chọn của người dùng.

public Dialog onCreateDialog(Bundle savedInstanceState) {
    mSelectedItems = new ArrayList();
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

    builder.setTitle("This is list choice dialog box");
    .setMultiChoiceItems(R.array.toppings, null,new DialogInterface.OnMultiChoiceClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which, boolean isChecked) {

            if (isChecked) {
                // Nếu người dùng check mt mc thì nó s được đưa vào danh mc được la chn
                mSelectedItems.add(which);
            }

            else if (mSelectedItems.contains(which)) {
                // Nếu không thì nếu nó đã có trong danh mc được la chn thì xóa nó đi
                mSelectedItems.remove(Integer.valueOf(which));
            }
        }
    })

    // Cài đt cho nút 'OK'
    .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int id) {
            // Khi người dùng nhn nút OK thì s lưu các mc được chn và đâu đó
            // hoc tr v component đã m hp thoi
            //...
        }
    })

    .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int id) {
            //...
        }
    });
    return builder.create();
}

Ví dụ áp dụng

Ví dụ sau minh họa việc sử dụng của Alert Dialog trong Android.

Sau đây là nội dung của file MainActivity.java:

package v1study.com.alertdialogv1study;

import android.content.DialogInterface;
import android.view.View;
import android.widget.Toast;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void open(View view){
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
        alertDialogBuilder.setMessage("Bn có chc chn mun n ng dng không?");
        //To nút Không
        alertDialogBuilder.setPositiveButton("Không", new DialogInterface.OnClickListener() {
            //Khi nhn s to thông báo
            @Override
            public void onClick(DialogInterface arg0, int arg1) {
                Toast.makeText(MainActivity.this,"Bn đã nhn nút Không",Toast.LENGTH_LONG).show();
            }
        });
        //To nút Có
        alertDialogBuilder.setNegativeButton("Có",new DialogInterface.OnClickListener() {
            //Khi nhn s đóng hp thoi
            @Override
            public void onClick(DialogInterface dialog, int which) {
                finish(); //Ri khi ng dng
            }
        });

        alertDialogBuilder.create().show();
        //alertDialog.show();
    }
}

Nội dung của file activity_main.xml:

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

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/alert_dialog_demo"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" app:layout_constraintHorizontal_bias="0.496"
            app:layout_constraintVertical_bias="0.094" android:textSize="30sp" android:textStyle="bold"
            android:textColor="#4CAF50"/>
    <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/alert_dialog_demo"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" app:layout_constraintHorizontal_bias="0.496"
            app:layout_constraintVertical_bias="0.731" android:textSize="30sp" android:textStyle="bold"
            android:textColor="#4CAF50" android:id="@+id/buttonAlertDialog" android:onClick="open"/>
    <ImageView
            android:layout_width="270dp"
            android:layout_height="270dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" app:layout_constraintHorizontal_bias="0.496"
            app:layout_constraintVertical_bias="0.396" android:id="@+id/textView" tools:srcCompat="@drawable/logo_v1"
            android:contentDescription="@string/logo_v1study" app:srcCompat="@drawable/logo_v1"/>

</androidx.constraintlayout.widget.ConstraintLayout>

Chạy ứng dụng Android vừa tạo ở trên:

Alert Dialog trong Android

Bạn nhấn nút "ALERT  DIALOG" sẽ hiện ra dialog như sau:

Alert Dialog

Nếu bạn nhấn nút Không sẽ cho kết quả như sau:

Alert Dialog trong Android

Nếu bạn chọn nút Có thì phương thức finish() sẽ được gọi và sẽ đóng ứng dụng.

» Tiếp: Animation trong Android
« Trước: DatePicker trong Android
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!