在 Android 的 Fragment 中显示 AlertDialog 的问题

8
我遵循了Android的示例,但出现了一个难以理解的错误:
void showDialog() {
    DialogFragment newFragment = MyAlertDialogFragment.newInstance();
    newFragment.show(fm, "alert");
}

public static class MyAlertDialogFragment extends DialogFragment {
    public static MyAlertDialogFragment newInstance() {
        MyAlertDialogFragment frag = new MyAlertDialogFragment();
        return frag;
    }

    public Dialog onCreateDialog(Bundle savedInstanceState) {
        return new AlertDialog.Builder(getActivity()).setTitle("test")
                .setMessage("bla bla bla").create();
    }
}

newFragment.show(fm, "alert"); 返回了一个错误:

在 DialogFragment 类型中的 show(FragmentManager, String) 方法对于参数 (FragmentManager, String) 不适用。

有人能帮我吗?


注意:请确认 fm 变量是正确的 FragmentManager 类型,并且您已经导入正确的包。
3个回答

13
问题是因为你需要使用支持包的FragmentManager,但当你调用getFragmentManager()时,你正在使用原生的FragmentManager。尝试在初始化变量fm时调用getSupportFragmentManager()

6

实际上,在按照@Jacob所说的做法之后,您还需要确保从Support包中包含DialogFragment,而不是从本地包中获取。

您可以通过导入来完成这个操作,

import android.support.v4.app.DialogFragment;

5

在我的情况下,我将minSDK设置为14,所以我不想使用支持包。我的问题是我导入了错误的DialogFragment

import android.support.v4.app.DialogFragment;

我将其更改为以下内容,它可以正常工作:
import android.app.DialogFragment;

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