如何将碎片显示为对话框?

9

我开发了一个应用程序,想要将Fragment显示为对话框。

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

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


使用DialogFragment。请参考http://developer.android.com/guide/topics/ui/dialogs.html#CustomLayout。 - kelunik
http://developer.android.com/reference/android/app/DialogFragment.html - pskink
4个回答

10
我们可以使用两种方法来将Fragment显示为对话框,但只有一种方法。
方法:
扩展类DialogFragment并覆盖以下两个方法之一:
onCreateView() 或
onCreateDialog()。
这两者之间的区别:
重写onCreateView()将让您将Fragment显示为对话框,并且可以自定义标题文本。
另一方面,重写onCreateDialog(),您可以再次将Fragment显示为对话框,并且可以自定义整个对话框Fragment。 这意味着,您可以填充要显示为对话框的任何视图。
注意:
使用DialogFragment的缺点是它不处理屏幕方向,并导致应用程序崩溃。
因此,您需要在DialogFragment类的onCreate()中使用setRetainInstance()。

6
我不同意你关于屏幕方向变化的注释。我多次使用过DialogFragment,当改变方向时它可以正常工作。显然,像所有片段一样,当你改变方向时它会被重新创建。 - Fabian Streitel
@FabianStreitel:请检查您的代码中是否在onCreate()方法中使用了setRetainInstance()方法或其他方式来避免崩溃。 - Anish Mittal

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


我使用了DialogFragment,但它仍然显示为前台而不是对话框,你能给我一个示例演示的链接吗? - Jayesh
1
这是我展示上面一个片段的方式:LoadingDialogFragment.newInstance(context.getString(R.string.loading_message)).show(getFragmentManager(), "searchingDialog"); - span
@Jayesh,你说的“显示为前端”是什么意思?我不明白。对话框始终会显示在活动的顶部。如果您想更改片段的内容,可以在onCreateDialog中设置自己的布局。请澄清一下 :/ - span
我的应用中有五个标签页,当我点击第二个片段(设置为第二个标签页)的按钮时,应该显示一个新的对话框片段,然后不能再点击其他标签页了,理解了吗?我想做与活动相同的事情,我不需要消息或任何东西,我有一个 XML 文件,我想在 DialogFragment 中显示它。 - Jayesh

0

-3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接