Фрагмент PreferenceFragmentCompat имеет значение mPreferenceManager null во время действия onCreate после раздувания

#java #android #android-fragments #androidx #android-preferences

#java #Android #android-фрагменты #androidx #android-настройки

Вопрос:

Я не совсем понимаю это. Я установил точку останова в коде библиотеки для onCreate(@Nullable Bundle savedInstanceState) метода библиотеки, и это похоже на то, что он не вызывается.

Мой фрагмент кода очень прост

 public class MySettingsFragment extends PreferenceFragmentCompat {
    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
        setPreferencesFromResource(R.xml.preferences, rootKey);
    }
}
 

И моя активность тоже не такая большая

 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.getPreferenceScreen(); или frag.findPreference(PREFERENCE_UID) , но у фрагмента есть null mPreferenceManager, поэтому большинство вещей терпят неудачу.

Мне нужно прочитать это, так как я синхронизирую некоторые настройки из своего приложения с собственными частями, и большинство руководств по настройкам слишком просты. Есть идеи, почему mPreferenceManager имеет значение null в моем фрагменте во время действия onCreate?

Ответ №1:

Я обнаружил, что значение mPreferenceManager не равно нулю в собственном методе onCreate фрагмента, поэтому я перенес туда то, что хотел запустить в методе onCreate действия.