班级档案
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会切换。用户界面永远不会改变,它总是处于关闭状态?
答案 0 :(得分:0)
这是因为您android:persistent
设置为false
。将其设置为true
,UI应相应更改。
答案 1 :(得分:0)
如果您使用
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'