共有設定を何度も使用しましたが、何らかの理由で、テストしている新しいアプリに変更が保存されていません。重要なコードの抜粋は次のとおりです。
SharedPreferences sp = getSharedPreferences(getString(R.string.key_preferences), MODE_PRIVATE);
Set<String> widgets = sp.getStringSet(getString(R.string.key_widgets), (new HashSet<String>()));
widgets.add(name + " " + Integer.toString(appWidgetId) + " " + address);
sp.edit().putStringSet(getString(R.string.key_widgets), widgets).commit();
ロギングを使用してウィジェットがセットに追加されていることを確認しましたが、更新されたセットが保存されることはありません。最後の行を...に変更すると
sp.edit().putStringSet(getString(R.string.key_widgets), widgets).putString("testkey", "testvalue").commit();
...その後、すべてがうまく保存されます。私は何が欠けていますか?
*アップデート:
これも機能することがわかりました。
SharedPreferences sp = getSharedPreferences(getString(R.string.key_preferences), MODE_PRIVATE);
Set<String> widgets = sp.getStringSet(getString(R.string.key_widgets), (new HashSet<String>()));
Set<String> newWidgets = new HashSet<String>();
for (String widget : widgets) newWidgets.add(widget);
newWidgets.add(name + " " + Integer.toString(appWidgetId) + " " + address);
sp.edit().putStringSet(getString(R.string.key_widgets), newWidgets).commit();
おそらく、設定を保存するためにエディター用の新しいオブジェクトを作成する必要があることについて、ドキュメントで何かを見逃していました。
*更新2:
エディターオブジェクトを作成しても違いはありません。
SharePreferences.Editor spe = sp.edit();
spe.putStringSet(getString(R.string.key_widgets), widgets)
spe.commit();