如何从PreferenceFragment中显示对话框?

6
我试图在PreferenceFragment中点击一个Preference时弹出一个DialogFragment。不幸的是,当我在DialogFragment.show()中调用getFragmentManager()时,我收到以下错误消息:
“Cannot resolve method 'show(android.app.FragmentManager, java.lang.String)'”
问题在于,我似乎无法从此片段引用android.support.v4.app.FragmentManager。负责此片段的活动扩展自FragmentActivity,但显然这还不够。我也尝试调用getSupportFragmentManager(),但那给了我这个错误:
“Cannot resolve method 'getSupportFragmentManager()'”
我该如何解决这个问题?
以下是一些代码:
gPrefAcknowledgements.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener()
{
    @Override
    public boolean onPreferenceClick(Preference preference)
    {
        DialogAcknowledgements dialogAck = new DialogAcknowledgements();
        dialogAck.show(getFragmentManager(), "acknowledgements");
        return true;
    }
});
2个回答

9

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


4
我想点赞,但我的声望只有11分。至少可以说这很令人沮丧。 - IAmKale

5

试试这个:

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

无论Fragment的类型是什么,您都可以始终调用Activity,它持有该Fragment。

编辑:

我错了,PreferenceFragment没有包含在支持库中,只能在Android 3.0及更高版本中使用。这篇文章可能有助于处理这种情况。


我也尝试过那个,但是它产生了相同的错误,因为它返回的是android.app.FragmentManager而不是android.support.v4.app.FragmentManager。 - IAmKale
2
getActivity().getSupportFragmentManager() 不好吗?你确定你在使用支持库导入你的碎片和 FragmentActivity 吗? - Steve Benett
PreferenceFragment似乎没有支持库类。我尝试在android.support.v4中查找,但没有找到相应的内容。 - IAmKale
1
似乎你是对的,请看这个文章:post - Steve Benett
你显然是正确的,但我发现我导入了错误的库。我已经将完整的解决方案发布为答案。 - IAmKale

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