DialogFragment是Fragment的一个子类,它专门处理对话框,具有一些与普通Fragment不同的特性和限制。
区别如下:
显示方式:
普通Fragment通常通过Activity的add()
函数
或replace()
函数
进行显示,而DialogFragment则通常使用show()
函数
显示。
DialogFragment通常使用setStyle()
函数
设置样式,比如设置对话框的大小、背景色、动画等;普通Fragment可以使用xml布局文件设置样式。
生命周期:
DialogFragment的生命周期和Activity相关,而不是依赖于它所依附的Activity的生命周期。这意味着DialogFragment在Activity被销毁时可以保存状态,可以在Activity重新创建后恢复它的状态。普通Fragment的生命周期与其依附的Activity相对应。
DialogFragment在关闭时可以返回结果值,而普通Fragment没有返回值。
示例代码:
public cl
as
s MyDialogFragment extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
//创建一个AlertDialog对象
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Dialog Title")
.setMessage("Dialog Message")
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
//点击OK按钮时,返回结果给调用者
getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, null);
dismiss();
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dismiss();
return builder.create();
在调用方Fragment中:
public class MyFragment extends Fragment {
private static final int REQUEST_DIALOG = 1;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_my, container, false);