Я думаю, что ваши вызовы setPreferenceForKey и preferenceForKey выглядят странно. Откуда это null
взято? Разве они не должны выглядеть как
widget.preferenceForKey(dashcode.createInstancePreferenceKey(userIdPrefKey))
widget.setPreferenceForKey(value, dashcode.createInstancePreferenceKey(userIdPrefKey));
Имеет ли синтаксис null
widget.setPreferenceForKey(null, dashcode.createInstancePreferenceKey(userIdPrefKey))
в remove()
удалить предпочтение? Наверное, это объяснит тебе ситуацию. При обновлении remove()
вызывается surley, и, таким образом, при перезапуске виджета настройки исчезают.
Я думаю, что есть только один способ сохранить ваши настройки во время обновления. Создайте один ключ предпочтения, не полагаясь на dashboard.createInstancePreferenceKey, но вместо этого подумайте об уникальном значении ключа.
В этом ключе preference вы можете сохранить все когда-либо введенные идентификаторы пользователей (в любом случае) с растущим (скажем, через запятую) списком. Когда экземпляр виджета открыт, а widget.preferenceForKey(dashcode.createInstancePreferenceKey(userIdPrefKey))
еще не установлен, вы можете позволить пользователю выбрать один из них, предоставив ему выбор или что-то подобное
Я просто подумал, что, возможно, процесс обновления достаточно хорош, чтобы перенести настройки в новую версию. Даже если вы не удалите настройки, я думаю, что widget.identifier (createInstancePreferenceKey) изменится, поэтому вы не сможете получить доступ к «старым» настройкам.