20

アプリにユーザー設定があり、さまざまなアクティビティで使用されます。アプリのさまざまなアクティビティ間でこれらの設定を利用する最良の方法を知りたい.

私は、メイン アクティビティから共有設定オブジェクトを作成し、そこからインテントをさまざまなアクティビティに送信してアクションを実行するという考えを持っています。それはうまくいくでしょうか...?

またはgetsharedpreferences()、すべてのアクティビティから電話をかけ続けます..?

ありがとう。

4

4 に答える 4

26

インテントを介して共有設定を送信することは、複雑すぎるようです。共有設定を以下のようなものでラップし、アクティビティから直接メソッドを呼び出すことができます:

public class Prefs {
    private static String MY_STRING_PREF = "mystringpref";
    private static String MY_INT_PREF = "myintpref";

    private static SharedPreferences getPrefs(Context context) {
        return context.getSharedPreferences("myprefs", 0);
    }

    public static String getMyStringPref(Context context) {
        return getPrefs(context).getString(MY_STRING_PREF, "default");
    }

    public static int getMyIntPref(Context context) {
        return getPrefs(context).getInt(MY_INT_PREF, 42);
    }

    public static void setMyStringPref(Context context, String value) {
        // perform validation etc..
        getPrefs(context).edit().putString(MY_STRING_PREF, value).commit();
    }

    public static void setMyIntPref(Context context, int value) {
        // perform validation etc..
        getPrefs(context).edit().putInt(MY_INT_PREF, value).commit();
    }
}
于 2010-10-29T12:48:46.193 に答える
8

この方法を使用して、使用するすべてのアクティビティで同じ名前の同じ変数を宣言できます。

  public static final String PREFS_NAME = "MyPrefsFile";
  static SharedPreferences settings;
  SharedPreferences.Editor editor;
  int wordCount;

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    settings = getSharedPreferences(PREFS_NAME, 0);
    editor = settings.edit();

    wordCount = settings.getInt("wordCount", 4); 

  }

ここで最初に wordCount は 4 を返します。そしてwordCountを編集して再度保存したい場合

  editor.putInt("wordCount", 6);
  editor.commit();

共有設定を使用するアクティビティで、これと同じ変数を宣言する必要があります。そして、すべてのアクティビティで getSharedPreferences を呼び出す方がよいでしょう。

その設定を意図的に渡すとは思えません。

于 2010-10-29T12:41:26.020 に答える
0

もちろん、アプリケーションで共有設定を使用できます。

string や int 以外の単純な型がある場合は、シングルトンを使用するか、アプリケーションのすべてのアクティビティからアクセスできるアプリケーション クラスを拡張できます。=> ここではディスク アクセスがありません。単にメモリに保持されます。

于 2010-10-29T12:44:12.670 に答える