Dialogfragment la gi

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:

SttPhươ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ử dụng lớp Builder để dễ dàng hơn khi tạo hộp thoại 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(); }); // Tạo đối tượng AlertDialog và trả nó về nơi gọi 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' chứa vị trí theo chỉ số của của mục được chọn } }); 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 một mục thì nó sẽ được đưa vào danh mục được lựa chọn mSelectedItems.add(which); } else if (mSelectedItems.contains(which)) { // Nếu không thì nếu nó đã có trong danh mục được lựa chọn 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 nhấn nút OK thì sẽ lưu các mục được chọn và đâu đó // hoặc trả về component đã mở hộp thoại //... } }) .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?"); //Tạo nút Không alertDialogBuilder.setPositiveButton("Không", new DialogInterface.OnClickListener() { //Khi nhấn sẽ tạo 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(); } }); //Tạo nút Có alertDialogBuilder.setNegativeButton("Có",new DialogInterface.OnClickListener() { //Khi nhấn sẽ đóng hộp thoại @Override public void onClick(DialogInterface dialog, int which) { finish(); //Rời khỏi ứng dụng } }); 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:

Dialogfragment la gi

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

Dialogfragment la gi

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

Dialogfragment la gi

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.