Android開發 - DialogFragment 類解析

阿俊学JAVA發表於2024-08-06

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");
                }
            });
        }
    }
    
  • 以上建立顯示一個對話方塊,並處理對話方塊的按鈕點選事件

相關文章