使用 AndroidX 命名空间在 PreferenceFragment 中显示 DialogFragment

Showing a DialogFragment in PreferenceFragment with AndroidX Namespace

我们目前正在将我们的 Android 应用迁移到新的 androidx 命名空间,如此处的官方开发者页面所述 https://developer.android.com/jetpack/androidx/migrate

不幸的是,我们的一些旧实现似乎已损坏。我们在我们的 androidx.preference.PreferenceFragment 之一中重复使用 DialogFragment(最初在应用程序设置之外使用)。迁移到 androidx 后,DialogFragment 现在需要显示一个 androidx.fragment.app.FragmentManager 实例 - 无法再通过调用

接收
FragmentManager fm = getFragmentManager();

在 PreferenceFragment 中。此调用仍将提供 android.app.FragmentManager 的实例。我想这是因为 PreferenceFragment 不是从 androidx.fragment.

派生的

有没有人遇到过这个问题并且碰巧知道解决方案我如何仍然可以在设置中重复使用对话框?

要获得正确的 FragmentManager,我们需要从 androidx.preference.PreferenceFragmentCompat 而不是 androidx.preference.PreferenceFragment 继承。这解决了我们的问题。

有关 PreferenceFragmentCompat 的详细信息,请参阅 Google Developer Homepage