android - FragmentTransaction.add().commit() 和 DialogFragment.show() 有什么区别?

标签 android android-fragments android-alertdialog

要显示 DialogFragment,我可以使用以下两种方式:

        ProgressDialogFragment fragment = (ProgressDialogFragment) getFragmentManager().findFragmentByTag("progress_dialog");
        if (fragment == null) {
            fragment = ProgressDialogFragment.newInstance();
            fragment.setCancelable(false);
            getFragmentManager().beginTransaction()
                    .add(fragment, "progress_dialog")
                    .commitAllowingStateLoss();

        }

            ProgressDialogFragment fragment = (ProgressDialogFragment) getFragmentManager().findFragmentByTag("progress_dialog");
            if (fragment == null) {
fragment.show(getFragmentManager().beginTransaction(), "progress_dialog");
            }

我应该在什么时候使用哪个?还是两者相同?

最佳答案

几乎都是一样的。 show 从您作为参数提供的 FragmentManager 中检索一个 transaction,并调用 add/commit,正如您在代码 fragment 中看到的那样

   public void show(FragmentManager manager, String tag) {
        mDismissed = false;
        mShownByMe = true;
        FragmentTransaction ft = manager.beginTransaction();
        ft.add(this, tag);
        ft.commit();
    }

唯一的区别是它们会在多次调用 show()

时重置一些标志

关于android - FragmentTransaction.add().commit() 和 DialogFragment.show() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35912128/

相关文章:

Android:不会从 fragment 调用 onOptionsItemSelected

java - 保存裁剪后的图像后为 "Unable to resume activity"- Android

Android ViewPager获取 View 空指针异常

java - 使用 Theme.Light.NoTitleBar 显示 Light AlertDialog

java - 如何检查警报是否可见android

java - 如何在 Android MVVM 架构中实现对话框选择

android - Flutter Android 构建因 middles/compiled_local_resources/debug/out 失败,不是可读目录

android - 如何本地化 drawable-nodpi?

android - AlertDialog 类转换异常

android - 使用 ViewFlipper 或 ViewPager 制作轮播