1

アプリの SettingsActivity を作成しました。このクラスをActivity使用してSharedPreferences、ユーザーが編集可能な設定を処理しています。

のセットアップ中に、メイン アクティビティSharedPreferencesの にロードしてからonCreate、SettingsActivity に再度ロードする必要があります。おそらく、getXXXX()メソッドへの両方の呼び出しにデフォルトが必要であり、両方の場所にデフォルト値をハードコードするのは良くないと考えました。なぜなら、それらを変更した場合、将来問題になると想像するからです。

これを行う上で最も優れている/最も人気のある (または受け入れられている標準) はどれですか?

  • 各アクティビティにインポートするグローバル変数クラスを作成し、そこでデフォルトの定数を定義しますか?

  • putExtraとを使用しgetExtraて、メイン アクティビティから設定アクティビティにデータを渡しますか?

他の提案はありますか?

4

5 に答える 5

3

Squonk には良い答えがあると思いますが、別の方法を探している場合は、Settingsすべての設定をメンバーとして持つクラスを作成することを検討してください。必要なデフォルトを使用して、から構築されloadFromPreferences(Context)たオブジェクトを返すような静的メソッドを持つことができます。編集内容を保存する方法もあるかもしれません。それが役立つことを願っています。SettingsSharedPreferencessaveSettings(Context)

于 2013-01-01T00:14:37.930 に答える
1

個人的には、この状況では、デフォルト値をリソース ファイルに入れます。そうすれば、グローバル変数クラスやヘルパー クラスを使用する必要がなくなります。Android リソースはすでにそれを行っています。

見る:

リソースの提供

その他のリソース タイプ

于 2013-01-01T00:01:19.403 に答える
0

静的な値を持つクラスを使用する代わりに、アプリケーションのプロセスが存続しているときに常に存続する Application クラスを拡張しないでください。共有メソッドと変数を保持できます

于 2013-01-01T00:15:21.617 に答える
0

両方のアクティビティの onCreate で SharedPreference を開くことを強くお勧めします。グローバル変数を使用しようとするたびに、検出と修正が困難な方法で値が消えます。アクティビティは、閉じると破棄されます。サービスはいつでもメモリから削除できます。サービスがスリープ状態でメモリ内にアクティビティがない場合、アプリケーション コンテキストは破棄されます。

そうは言っても、アプリケーション コンテキストに変数を配置するのがおそらく最適な場所です。Application を拡張したクラスを作成し、これを利用するよう AndroidManifest.xml を設定します。サービスまたはブロードキャスト レシーバーから使用しようとしても、そこに価値があるとは期待しないでください。

また、アクティビティの読み込みが遅すぎるという問題がない限り、最適化よりも機能に時間を費やす方がよいでしょう。

于 2013-01-01T00:20:05.060 に答える
-2

オブジェクトを として宣言public staticし、別のクラスから参照できます。

アクティビティ A:

public static int testIntegerA = 42;

Intent intentInteger = new Intent(getActivityContext(), ActivityB.class);
intentInteger.putExtra("INTENT_EXTRA", testIntegerA);
startActivity(intentInteger);

アクティビティ B:

public static int intentInt, staticInt;

staticInt = ActivityA.testIntegerA;
intentInt = getIntent().getExtras().getInt("INTENT_EXTRA");

これで、両方とも42intentIntに等しくなりました。staticInt

于 2012-12-31T23:54:57.683 に答える