Android开发 DialogFragment对话框详解

时间:2022-06-28 06:24:30

前言

  在聊DialogFragment之前,我们看看以往我们在Android里实现一个对话框一般有这几种方式:

  •   Dialog 继承重写Dialog实现一个自定义的Dialog
  •   AlertDialog Android原生提供的对话框(底层是继承Dialog实现)
  •   PopupWindow 用弹出悬浮框,实现对话框。这种对话框可以用在指定位置显示,一般用于一些非常小的按键弹窗。怎么实现可以参考我的博客:https://www.cnblogs.com/guanxinjing/p/10156153.html

  这3种弹窗对话框都有一个问题,就是与activity的生命周期不是捆绑的,得时刻注意在activity后台之后关闭Dialog。所以,后面google推荐使用DialogFragment来取代它们。DialogFragment本质其实是Fragment,有Fragment的生命周期并且与创建它的activity有捆绑,在google推出了Jetpack系列后,配合Jetpack系列LiveData与navigation在使用上比一般的Dialog安全更多,并且在数据传递上也非常简单,配合navigation架构管理起来也十分简单明晰。

  如果你未接触过不了解Jetpack系列,可以参考我的博客:https://www.cnblogs.com/guanxinjing/category/1550385.html   了解完Jetpack系列,你就可以明白google为什么推出这种对话框了。

  下面我们就根据2个最简单demo和与一些使用特例,来介绍DialogFragment的使用。

  

Dialog创建DialogFragment的简单Demo

  DialogFragment有2种方法创建我们需要的对话框内容,其中就有以Dialog来创建内容方式。

继承重写DialogFragment: 

public class MyDialog1 extends DialogFragment {

    @NonNull
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
        //创建对话框,我们需要返回dialog
        AlertDialog.Builder dialog = new AlertDialog.Builder(getContext());
        dialog.setTitle("测试Dialog");
        dialog.setMessage("DialogFragment");
        return dialog.create();
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        //此方法在视图已经创建后返回的,但是这个view 还没有添加到父级中,我们在这里可以重新设定view的各个数据
    }
}

 

在activity里显示对话框