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 会切换。用户界面永远不会改变,它总是停留在关闭状态?

4

2 回答 2

1

如果你使用

implementation 'com.android.support:preference-v7:27.1.1'

你应该 像这样使用SwitchPreferenceCompat

<SwitchPreferenceCompat
            android:key="taskSendNotification"
            android:title="@string/notificationTask"
            android:defaultValue="true"></SwitchPreferenceCompat>

android.support.v14.preference.SwitchPreference不适用'com.android.support:preference-v7:27.1.1'

于 2018-04-27T13:45:16.697 回答
0

这是因为您已android:persistent设置为false. 将其设置为true,UI 应相应更改。

于 2017-09-05T09:11:50.907 回答