1

私が最初にアプリを作成して公開したとき、アプリケーション設定を処理するためにカスタム作成されたアクティビティを使用していました。次のように、カスタムファイル名を使用して共有設定を保存しました。

getSharedPreferences("custom_settings_file",MODE_PRIVATE);

しかし今、私は自分のアプリをリファクタリングしていて、PreferenceActivityまたはPreferenceFragmentPreferenceScreenセクション付きのxmlファイルを実装したいと思います。私が見たすべてのチュートリアルまたは例は使用しています

getDefaultSharedPreferences(context);

PreferenceActivityはデフォルトのファイル名を想定して設定を保存し、別のファイル名を使用するように指示する方法がないため、共有設定を取得します(少なくとも、ドキュメントを1時間検索して読んだ後、ファイル名を見つけることができませんでした)。

だから今私は問題を抱えています。新しいデフォルトファイルを単に使用する場合、新しいアプリケーションは「custom_settings_file」について何も知らないため、アプリの既存のユーザーはアプリを更新するときに設定を失います。アプリの更新時に古いファイルから新しいファイルにデータを移動するための最良の方法は何でしょうか?

これが私が思いつくことができる可能なオプションです:

  • クラスを拡張Applicationし、onCreate()にコードを実装して、アプリを起動するたびに「custom_settings_file」の存在を確認し、その内容を新しいものに移動するようにします。ただし、アプリを起動するたびにコードブロックを実行すると、1回だけ実行する必要がある操作に多くの処理リソースが浪費されているように見えます。
  • 古い設定がなくなったことをユーザーに通知するだけです。しかし、明らかにこれは受け入れられません。

オプション1よりも優れた解決策はありますか?おそらく誰かがすでに同様の問題に直面していますか?

4

3 に答える 3

2

xml 設定ファイルもロードする場合は、これを試すことができます。

PreferenceManager.setDefaultValues(context, YOUR_PREFERENCE_NAME, MODE_PRIVATE, R.xml.preference_file, false);

そうでない場合 (各設定項目をコードに動的に追加したい場合)、次のようにすることができます。

PreferenceManager pm = getPreferenceManager();
pm.setSharedPreferencesMode(MODE_PRIVATE);
pm.setSharedPreferencesName(YOUR_PREFERENCE_NAME);

それでも を使用して移行を処理したい場合defaultSharedPreferenceは... 私はこれを書いており、Nicklas の回答が表示されているので、ここで完了です。

于 2013-03-18T01:04:23.177 に答える
2

ナンバーワンを一度だけするのを妨げているのは何ですか? 新しい共有設定に「移行」ブール値を追加するだけです。

于 2013-03-18T00:55:43.033 に答える
1

新規インストールかアップグレードかを記録する新しい SharedPreferences に値を追加できますか。sharedpreferences に設定がない場合は、以前の方法で古い設定ファイルがあるかどうかを確認してください。次に、それらの設定を新しい方法に変換し、アップグレードされたことを示すプライベート設定を設定します。次に、新しい状態を示す新しい値を設定するだけで、古い設定を確認する必要がなくなります。

于 2013-03-18T00:57:20.067 に答える