9

我正在制作一个与 1.6+ 向后兼容的蜂窝项目/叉子。

根据 Google/Android 提供的文档,我决定构建我所有的片段,这些片段DialogFragment对蜂窝非常有用……它让我可以灵活地将任何内容作为对话框或“全屏”元素。

我现在已经合并了兼容性工具包,并将我的导入和方法调用移到了那里。现在我在 2.3 上,我正在尝试启动相同的意图,但我收到了这个问题:

java.lang.IllegalStateException: DialogFragment can not be attached to a container view

的文档DialogFragment建议它可以Fragment在您不需要对话框/弹出功能时执行。

4

5 回答 5

9

我设法在DialogFragment.java兼容性包中正确解决了这个问题:

更改第 74 行: boolean mShowsDialog = false;

注释掉第 232 行://mShowsDialog = mContainerId == 0;

然后将两个show方法改成这样:

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

// JavaDoc removed
public int show(FragmentTransaction transaction, String tag) {
    this.setShowsDialog(true);
    transaction.add(this, tag);
    mRemoved = false;
    mBackStackId = transaction.commit();
    return mBackStackId;
}

基本上,他们确实写了支持,但是在对话框/嵌入之间切换的切换不起作用。

所以这里我们默认是嵌入的,然后在我们显示之前设置为显示为一个对话框。

于 2011-09-26T20:05:08.877 回答
3

您可以使用 android.support.v4.app.DialogFragment 版本,请查看这里

于 2013-12-24T11:56:29.690 回答
2

我有同样的问题。我从未找到“正确”的解决方案,但您可以通过将 Dialog 的主题设置为OnCreateDialog(). 通过将主题设置为android.R.style.Theme_Holo_DialogWhenLarge对话框,将在大屏幕和超大屏幕上显示为对话框,而在小屏幕和普通屏幕上显示为全屏窗口。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(STYLE_NO_TITLE, android.R.style.Theme_Holo_DialogWhenLarge);
}
于 2011-04-18T07:32:54.457 回答
2

我正在使用 DialogFragment 子类并在 onCreate() 作品中执行此技巧。我在调用 onCreate() 之前调用 setShowsDialog()(在我的 Activity 的 onAttachFragment() 中)

public class DialogFragmentHosted extends DialogFragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        boolean forceShowDialog = savedInstanceState==null;
        boolean showsDialog = getShowsDialog();
        super.onCreate(savedInstanceState);
        if (forceShowDialog )
            setShowsDialog(showsDialog);
    }
}
于 2012-06-12T09:29:32.010 回答
0

你检查过应用说明吗?它显示了嵌入对话框的推荐方式,我已经验证这适用于 2.2.1。

http://developer.android.com/reference/android/app/DialogFragment.html#DialogOrEmbed

我的片段布局必须更改以符合要求,但它既快速又简单。能够在 XML 中定义对话框片段并期望它在没有任何额外工作的情况下被嵌入是更自然的(因为上面对 Compat API 的更改将支持);并且仅在通过 show() 调用时期望模态行为。我想这不是当前的行为。

于 2012-04-11T00:22:36.283 回答