I'm getting this error message "could not find fragment constructor" whenever I enter to my settings activity and rotate the device. Bellow is my settings activity onCreate()
method and SettingsFragment
class.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences sharedPreferences =
PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
setContentView(R.layout.settings_activity);
if (savedInstanceState == null) {
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.settings, new SettingsFragment(this))
.commit();
}
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
}
public static class SettingsFragment extends PreferenceFragmentCompat {
WeakReference<SettingsActivity> activityWeakReference;
SettingsFragment(SettingsActivity activity) {
activityWeakReference = new WeakReference<>(activity);
}
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.root_preferences, rootKey);
ListPreference listPreference = findPreference("jojojojo");
if (listPreference != null) {
listPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
activityWeakReference.get().setResult(1);
return true;
}
});
}
SwitchPreferenceCompat switchPreferenceCompat = findPreference("lalalala");
if (switchPreferenceCompat != null) {
switchPreferenceCompat.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if ((boolean)newValue) {
activityWeakReference.get().mostrarMensaje(getString(R.string.toastFrasesOn));
activityWeakReference.get().setResult(2);
} else {
activityWeakReference.get().setResult(3);
}
return true;
}
});
}
}
}