PreferenceFragmentCompat 片段在膨胀后 activity OnCreate 期间的 mPreferenceManager 为空
PreferenceFragmentCompat Fragment has mPreferenceManager null during activity OnCreate after inflating
我不太明白这一点。我在库的代码中为库的 onCreate(@Nullable Bundle savedInstanceState)
方法设置了一个断点,就像它没有被调用一样。
我的片段代码超级简单
public class MySettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.preferences, rootKey);
}
}
我的activity也没那么大
public class PreferencesActivity extends AppCompatActivity
{
MySettingsFragment frag;
@SuppressWarnings("unused")
@Override
public void onCreate(@Nullable Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.settings_activity);
frag = new MySettingsFragment();
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.settings_container, frag)
.commit();
// frag has null mPreferenceManager here
// so some stuff I call from it will crash
}
// ...
}
我可以在应用程序上查看并加载我的设置,但我想在那里获取 frag 并阅读 frag.getPreferenceScreen();
或 frag.findPreference(PREFERENCE_UID)
之类的内容,但 frag 有一个 null
mPreferenceManager 所以大多数事情失败了。
我需要阅读这些内容,因为我正在将我的应用程序的一些设置与本机部分同步,而且大多数首选项教程都太简单了。知道为什么 mPreferenceManager 在 Activity OnCreate 期间在我的片段中为 null 吗?
我发现 fragment 自己的 onCreate 方法上的 mPreferenceManager 不为空,所以我把 运行 上 Activity 的 onCreate 方法上我想要的东西移到了那里。
我不太明白这一点。我在库的代码中为库的 onCreate(@Nullable Bundle savedInstanceState)
方法设置了一个断点,就像它没有被调用一样。
我的片段代码超级简单
public class MySettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.preferences, rootKey);
}
}
我的activity也没那么大
public class PreferencesActivity extends AppCompatActivity
{
MySettingsFragment frag;
@SuppressWarnings("unused")
@Override
public void onCreate(@Nullable Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.settings_activity);
frag = new MySettingsFragment();
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.settings_container, frag)
.commit();
// frag has null mPreferenceManager here
// so some stuff I call from it will crash
}
// ...
}
我可以在应用程序上查看并加载我的设置,但我想在那里获取 frag 并阅读 frag.getPreferenceScreen();
或 frag.findPreference(PREFERENCE_UID)
之类的内容,但 frag 有一个 null
mPreferenceManager 所以大多数事情失败了。
我需要阅读这些内容,因为我正在将我的应用程序的一些设置与本机部分同步,而且大多数首选项教程都太简单了。知道为什么 mPreferenceManager 在 Activity OnCreate 期间在我的片段中为 null 吗?
我发现 fragment 自己的 onCreate 方法上的 mPreferenceManager 不为空,所以我把 运行 上 Activity 的 onCreate 方法上我想要的东西移到了那里。