2

これまで、私のアプリの PreferenceActivity の「デフォルトにリセット」ボタンは次のように機能していました。

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preferences.edit();
editor.clear();
editor.commit();

これは問題なく機能していますが、最近、PreferenceManager クラスにsetDefaultValuesメソッドがあることに気付きました。関数の最後のメモには、設定をクリアした後にこの関数を呼び出して、設定をデフォルトに戻す必要があることが示されています。では、このメソッドを呼び出さずにすべてが正常に機能しているのに、ドキュメントでこのメソッドを呼び出すように指示されているのはなぜでしょうか?

また、論理的には必要ないようです。設定をクリアすると、アプリケーションが初めて実行されたときと同じことが行われます。設定で defaultValue 属性を使用して、すべての値を入力します。したがって、この追加のメソッドを呼び出すのは冗長に思えます。

それで必要ですか?

4

2 に答える 2

1

一般に、この追加の呼び出しは必要ですが、特定のケースでは、基本的に冗長です。

私は間違っているかもしれませんが、あなたが使用しているエディターメソッドは、editor.clear()すべての設定をデフォルトではなく null に設定します。ユーザーが設定を拡張するまではPreferenceActivity、preferences.xml が読み込まれ、デフォルトが設定されません。

基本的に、呼び出しは、設定が に設定されている場合にのみSetDefaultValues()、設定をデフォルト値に設定します。「Age」という設定があり、xml でデフォルトが「21」に設定されているとします。ユーザーが設定メニューを拡張したことがないと仮定すると、設定のクエリ方法によっては、null 応答が返される場合があります。これが、フォームでクエリを実行することをお勧めする理由です。クエリの前にこの呼び出しを行う (および渡す) と、"Age" が既定値の "21" に設定されます。注: ユーザーがプリファレンスを設定するか、メニューを拡張すると、この呼び出しは無効になります。nullprefs.getString("prefkey", "defaultvalue");true

ただし、設定のeditor.clear() アクティビティから呼び出しているため、設定は、preferences.xml の既定値で自動的に再設定されるため、呼び出しを行う必要はありません。ただし、他のアクティビティから呼び出しを行った場合は、そうする必要があります。そうしないと、すべての設定が null になります。完全を期すために、ベルトとサスペンダーと同じように呼び出しを追加することをお勧めします。これにより、関数をこのアクティビティから移動することを決定した場合でも、すべての設定が null であることを不思議に思うことはありません。パフォーマンス面での影響はありません。

また、関係ありませんが、例の最後の3行を次のように置き換えることで、コードの行を節約できますpreferences.edit().clear().commit();

于 2013-05-23T13:35:23.997 に答える