Android开发 - DialogFragment 类显示对话框使用解析

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");
                }
            });
        }
    }
    
  • 以上创建显示一个对话框,并处理对话框的按钮点击事件

posted @ 2024-08-06 09:50  阿俊学JAVA  阅读(322)  评论(0编辑  收藏  举报