【问题标题】:How can I display a Dialog from a PreferenceFragment?如何从 PreferenceFragment 显示对话框?
【发布时间】:2013-07-25 20:41:12
【问题描述】:

当我点击 PreferenceFragment 中的 Preference 时,我试图调出 DialogFragment。不幸的是,当我在 DialogFragment.show() 中调用 getFragmentManager() 时,我收到以下错误:

无法解析方法'show(android.app.FragmentManager, java.lang.String)'

问题是我似乎无法从此片段中引用 android.support.v4.app.FragmentManager。负责这个fragment的activity继承自FragmentActivity,但显然这还不够。我也尝试调用 getSupportFragmentManager(),但这给了我这个错误:

无法解析方法“getSupportFragmentManager()”

我怎样才能做到这一点?

这里有一些代码:

gPrefAcknowledgements.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener()
{
    @Override
    public boolean onPreferenceClick(Preference preference)
    {
        DialogAcknowledgements dialogAck = new DialogAcknowledgements();
        dialogAck.show(getFragmentManager(), "acknowledgements");
        return true;
    }
});

【问题讨论】:

    标签: android preferences android-support-library


    【解决方案1】:

    基于史蒂夫的回答,我还需要设置 DialogFragment 以从 android.app.DialogFragment(而不是 android.support.v4.app.DialogFragment)导入。该库中的 show() 函数需要一个 android.app.FragmentManager,我可以通过调用 getFragmentManager() 来提供它,就像我在问题中发布的代码中所做的那样。

    【讨论】:

    • 我会投票,但我只有 11 个代表。至少可以说令人沮丧。
    【解决方案2】:

    试试这个:

    dialogAck.show(getActivity().getFragmentManager(), "acknowledgements");
    

    您始终可以调用包含与其类型相同的 Fragment 的 Activity。

    编辑:

    我错了,PreferenceFragment 不包含在支持库中,仅适用于 Android 3.0 及更高版本。这个post 可以帮助处理这种情况。

    【讨论】:

    • 我也试过了,因为它返回 android.app.FragmentManager,而不是 android.support.v4.app.FragmentManager,所以产生了同样的错误。
    • getActivity().getSupportFragmentManager() 也不好吗?您确定要为 Fragment 和 FragmentActivity 使用支持库导入吗?
    • PreferenceFragment 似乎没有支持库类。我尝试在 android.support.v4 周围寻找,但找不到任何东西。
    • 看来你是对的,看看这个post
    • 你显然是对的,但我发现我导入了错误的库。我发布了完整的解决方案作为答案。
    猜你喜欢
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多