アクティビティ間で共有設定を使用する最良の方法は何ですか

StackOverflow https://stackoverflow.com/questions/4051875

  •  27-09-2019
  •  | 
  •  

質問

アプリにはユーザーの好みがあり、さまざまなアクティビティで使用されます。アプリのさまざまなアクティビティ間でこれらの好みを活用する最良の方法を知りたいと思います。

メインアクティビティから共有設定オブジェクトを作成し、そこからさまざまなアクティビティに意図を送信して行動を起こすという考えがあります。それはうまくいきますか...?

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

ありがとう。

役に立ちましたか?

解決

意図を介して共有設定を送信すると、複雑になっているようです。共有の好みを以下のようなもので包み、アクティビティから直接メソッドを呼び出すことができます。

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();
    }
}

他のヒント

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

  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を呼び出す方が良いでしょう。

その好みを意図的に渡すことが機能するとは思わない。

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

文字列やINTよりも単純なタイプ以上の場合、Singletonを使用するか、アプリケーションのすべてのアクティビティがアクセスできるアプリケーションクラスを拡張できます。 =>ここにディスクアクセスはありません。単にメモリに保たれます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top