DialogFragment 是什麼
- DialogFragment 是一種用於顯示對話方塊的工具,同時它也是一個抽象類。在Android應用中,對話方塊是一種小視窗,通常用於顯示重要資訊或提示使用者進行某些操作。透過使用 DialogFragment,我們可以在應用中方便地顯示和管理對話方塊
DialogFragment 的好處
- 使用 DialogFragment 可以更好地處理對話方塊在螢幕旋轉等配置變化時的狀態,不會因為配置變化導致對話方塊消失或重建。它還可以更方便地在其他Fragment視窗中顯示對話方塊
DialogFragment 的使用
-
建立主佈局檔案:
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" <!-- 佈局寬度充滿父檢視 --> android:layout_height="match_parent"> <!-- 佈局高度充滿父檢視 --> <!-- 按鈕,位於父檢視的中心 --> <Button android:id="@+id/show_dialog_button" <!-- 按鈕的 ID --> android:layout_width="wrap_content" <!-- 按鈕的寬度自適應內容 --> android:layout_height="wrap_content" <!-- 按鈕的高度自適應內容 --> android:text="顯示對話方塊" <!-- 按鈕上的文字 --> android:layout_centerInParent="true"/> <!-- 按鈕在父檢視中居中 --> </RelativeLayout>
-
建立 DialogFragment 類:
MyDialogFragment.java
import android.app.Dialog; // 匯入 Dialog 類 import android.content.DialogInterface; // 匯入 DialogInterface 類 import android.os.Bundle; // 匯入 Bundle 類 import androidx.annotation.NonNull; // 匯入 NonNull 註解 import androidx.annotation.Nullable; // 匯入 Nullable 註解 import androidx.appcompat.app.AlertDialog; // 匯入 AlertDialog 類 import androidx.fragment.app.DialogFragment; // 匯入 DialogFragment 類 // 建立一個繼承自 DialogFragment 的類 public class MyDialogFragment extends DialogFragment { // 重寫 onCreateDialog 方法,建立對話方塊 @NonNull @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { // 建立一個 AlertDialog.Builder 例項,使用帶 AppCompat 主題的上下文: // 如果DialogFragment的父類非Activity(),而是Fragment,那麼我們單使用requireActivity()的上下文就行不通了,必須要加入第二個引數R.style.Theme_AppCompat_Dialog_Alert強行呼叫AppCompat主活動的主題 AlertDialog.Builder builder = new AlertDialog.Builder(requireActivity()/*, R.style.Theme_AppCompat_Dialog_Alert*/); // 設定對話方塊的標題 builder.setTitle("提示") // 設定對話方塊的訊息 .setMessage("這是一個簡單的對話方塊") // 設定“確定”按鈕及其點選事件 .setPositiveButton("確定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // 這裡處理點選“確定”按鈕的邏輯 } }) // 設定“取消”按鈕及其點選事件 .setNegativeButton("取消", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // 點選“取消”按鈕時關閉對話方塊 dialog.dismiss(); } }); // 返回建立的對話方塊 return builder.create(); } }
-
啟動類
import android.os.Bundle; // 匯入 Bundle 類 import android.view.View; // 匯入 View 類 import android.widget.Button; // 匯入 Button 類 import androidx.appcompat.app.AppCompatActivity; // 匯入 AppCompatActivity 類 // 建立主活動類,繼承自 AppCompatActivity public class MainActivity extends AppCompatActivity { // 重寫 onCreate 方法 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 設定活動的內容檢視 setContentView(R.layout.activity_main); // 獲取佈局中的按鈕 Button showDialogButton = findViewById(R.id.show_dialog_button); // 設定按鈕的點選事件監聽器 showDialogButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 建立 MyDialogFragment 例項 MyDialogFragment dialogFragment = new MyDialogFragment(); // 顯示對話方塊 dialogFragment.show(getSupportFragmentManager(), "MyDialogFragment"); } }); } }
-
以上建立和顯示一個對話方塊,並處理對話方塊的按鈕點選事件