9

我开发了应用程序,我想在其中将 Fragment 显示为对话框,

我在我的应用程序中使用了选项卡和片段,我只有一个活动,我根据需要替换片段,

如果我们使用活动,那么我们在清单文件中声明“android:theme="@android:style/Theme.Dialog" 以将活动显示为对话框,我想对 Fragment 做同样的事情

4

4 回答 4

8

我们可以使用两种方式将 Fragment 显示为对话框,但只有一种方式。

解释:

方法:

扩展类 DialogFragment 并覆盖以下两种方法中的任何一种:

onCreateView() 或

onCreateDialog()。

差异。这两者之间:

覆盖onCreateView () 将让您将片段显示为对话框,并且您可以自定义标题文本。

另一方面,重写onCreateDialog (),您可以再次将片段显示为对话框,在这里您可以自定义整个对话框片段。意味着,您可以膨胀任何视图以显示为对话框。

如果您需要任何解释上述文本的源代码,请告诉我。

笔记:

使用 DialogFragment 有一个缺点。它不处理屏幕方向。并使应用程序崩溃。

因此,您需要在 DialogFragment 类的 onCreate() 中使用 setRetainInstance()。

于 2016-07-18T07:54:29.860 回答
0

这是我使用的加载对话框:

import android.app.Dialog;
import android.app.DialogFragment;
import android.app.ProgressDialog;
import android.os.Bundle;

public class LoadingDialogFragment extends DialogFragment {

    private final String message;

    private LoadingDialogFragment(String message) {
        this.message = message;
    }

    public static LoadingDialogFragment newInstance(String message) {
        LoadingDialogFragment fragment = new LoadingDialogFragment(message);
        return fragment;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        final ProgressDialog dialog = new ProgressDialog(getActivity());
        dialog.setMessage(message);
        dialog.setIndeterminate(true);
        dialog.setCancelable(true);
        return dialog;
    }

}

可以这样实例化:

 LoadingDialogFragment.newInstance(context.getString(R.string.loading_message))

如果你想要一个自定义布局,你可以从这个对话框内部扩展视图和 setContentView。 http://developer.android.com/guide/topics/ui/dialogs.html#CustomLayout

于 2013-05-29T11:41:28.340 回答
-1

只需使用 DialogFragment。它是用于此用途的预期片段子类.. http://developer.android.com/reference/android/app/DialogFragment.html

于 2013-05-29T11:39:49.480 回答
-2

您的片段类应该扩展 DialogFragment 而不是片段。

查看文档:http: //developer.android.com/reference/android/app/DialogFragment.html

于 2013-05-29T11:39:08.513 回答