读取switchpreference的当前值

时间:2018-02-22 02:53:40

标签: java android mobile

我使用switch语句来检查首选项的来源。

public class SettingsActivity extends PreferenceActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// Display the fragment as the main content.
getFragmentManager().beginTransaction()
        .replace(android.R.id.content, new SettingsFragment())
        .commit();
PreferenceManager.setDefaultValues(this, R.xml.preferences, false);

getFragmentManager().beginTransaction().replace(android.R.id.content,
        new SettingsFragment()).commit();
}

public static class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.preferences);
}

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    Preference pref = findPreference(key);
    switch(key) {
        case "key_video_quality":
            Log.i("Tag1", "Video quality button pressed");
            break;
        case "key_video_length":
            Log.i("Tag2", "Video length button pressed");
            break;
        case "key_auto_save":
            Log.i("Tag3", "Auto save button pressed");
            break;
        case "key_dark_mode":
            Log.i("Tag4", "Dark mode button pressed");
            break;
        }
    }
}

key_auto_save永远不会被触发,而key_dark_mode就是SwitchPreferences

是否有方法在按下时检查开关首选项的当前值,以便我可以决定为我的应用程序打开/关闭黑暗主题?正如我将其作为一般用户使用Preference我不认为isChecked()适用于此处。

另外,我对key_auto_save问题不确定,关键是正确的。

2 个答案:

答案 0 :(得分:0)

您是否正在注册听众onResume

getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);

如果没有看到更多代码,很难判断,例如你是否正在扩展PreferenceActivity

答案 1 :(得分:0)

在我的onSharedPreferenceChanged方法中case "key_dark_mode":我使用sharedPreferences.getBoolean(key, false);返回switchPreference是真还是假。