简体   繁体   English

SwitchPreference的图形不变

[英]SwitchPreference's graphic does not change

SwitchPreference switchPreference = new SwitchPreference(preferenceScreen.getContext());
switchPreference.setKey(sensor.getName());
switchPreference.setTitle(sensor.getName());
switchPreference.setChecked(true);

If I check for the status of the switch with 如果我使用以下命令检查开关的状态

switchPreference.isChecked()

It returns the correct boolean value as true. 它将正确的布尔值返回为true。 However, the switch's graphic is always at the state where it was set on the previous run. 但是,开关的图形始终处于上一次运行时设置的状态。

The switches are dynamically created in onCreate() 这些开关是在onCreate()中动态创建的

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.preferences); //almost empty
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
    prefs.registerOnSharedPreferenceChangeListener(this);
    PreferenceScreen preferenceScreen = this.getPreferenceScreen();
    PreferenceCategory preferenceCategory = new PreferenceCategory(preferenceScreen.getContext());
    preferenceCategory.setTitle("Sensor List");
    preferenceScreen.addPreference(preferenceCategory);

    for (TrackingData sensor : SensorService.data)
    {
        SwitchPreference switchPreference = new SwitchPreference(preferenceScreen.getContext());
        switchPreference.setKey(sensor.getName());
        switchPreference.setTitle(sensor.getName());
        switchPreference.setChecked(true);
        Log.d(TAG_SENSOR,switchPreference.getKey() + "'s status is " + switchPreference.isChecked());
        preferenceCategory.addPreference(switchPreference);
    }
}


public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
{


    SwitchPreference preference = (SwitchPreference) findPreference(key);
    boolean value = preference.isChecked();
    if (value)
    {
        //start tracking this sensor
        Log.d(TAG_SENSOR, key + " tracking enabled");
    }
    else
    {
        //stop tracking this sensor
        Log.d(TAG_SENSOR, key + "tracking disabled");
    }

}

经过一番修补,我发现解决方法是将SwitchPreference的持久值设置为false

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM