Я пытаюсь изменить тумблер SwitchPreferenceCompat на true и false прагматически. Однако в классе SettingsFragment метод ammendSwitchPreferenceSetting () переменная предпочтения всегда равна нулю, однако, если я вызову этот метод из onCreatePreferences (), он будет работать, но мне нужно вызывать его в другом месте.
import android.os.Bundle;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.preference.CheckBoxPreference;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.SwitchPreferenceCompat;
public class SettingsActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings_activity);
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.settings, new SettingsFragment())
.commit();
ActionBar actionBar = getSupportActionBar();
//will allow the user to go back to parent page of the application
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
}
public static class SettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.root_preferences, rootKey);
}
public void ammendSwitchPreferenceSetting(String key, boolean value){
//is always null for some reason
SwitchPreferenceCompat preference = findPreference(key);
preference.setChecked(value);
}
}
}
<SwitchPreferenceCompat
android:enabled="true"
android:summary="some summary"
app:defaultValue="true"
app:key="NetworkType"
app:title="some title" />
А потом я звоню из другого класса
SettingsActivity.SettingsFragment settingsFragment = new SettingsActivity.SettingsFragment();
settingsFragment.ammendSwitchPreferenceSetting("NetworkType", false);