クラスファイル
import android.support.v14.preference.SwitchPreference;
//...
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.pref_blank);
this.preferenceScreen = getPreferenceScreen();
}
public void resetDevices(ArrayList<DeviceAdapterItem> items) {
preferenceScreen.removeAll();
preferenceScreen.setPersistent(false);
for(DeviceAdapterItem i : items) {
ExpandablePreferenceCategory category = buildCategory(i);
preferenceScreen.addPreference(category);
Preference deviceTypePreference = buildDeviceTypePreference(i);
deviceTypePreference.setOnPreferenceChangeListener(this);
category.addPreference(deviceTypePreference);
Preference monitoring = buildMonitoringPreference(i);
monitoring.setOnPreferenceChangeListener(this);
category.addPreference(monitoring);
Preference wifiOnly = buildWifiOnlyPreference(i);
wifiOnly.setOnPreferenceChangeListener(this);
category.addPreference(wifiOnly);
Preference delete = buildDeletePreference(i);
delete.setOnPreferenceChangeListener(this);
category.addPreference(delete);
category.handleCollapseExpand();
}
}
private Preference buildMonitoringPreference(DeviceAdapterItem i) {
SwitchPreference monitoring = new SwitchPreference(context.getSupportActionBar().getThemedContext());
monitoring.setPersistent(false);
monitoring.setTitle(getString(R.string.monitoring));
monitoring.setKey("some bogus value" + i.getDeviceId());
monitoring.setChecked(i.isTakeSnapshots());
monitoring.setSummary(getString(i.isTakeSnapshots() ? R.string.enabled : R.string.disabled ));
return monitoring;
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
Log.d("pchange", preference.getTitle() + " = " + newValue.toString());
if(preference instanceof SwitchPreference) {
Log.d("pchange", "its a switch!");
((SwitchPreference) preference).setChecked((boolean)newValue);
}
return true;
}
pref_blank.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:persistent="false"
>
</PreferenceScreen>
スイッチがオフになっているように見えます (オンにする必要がある場合)。UI でスイッチをクリックすると、onPreferenceChange がトリガーされ、newValue が切り替わります。UI は変わらないけど、いつもオフの状態のまま?