2

クラスファイル

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 は変わらないけど、いつもオフの状態のまま?

4

2 に答える 2