什么是在活动之间使用共享偏好的最佳方式

时间:2010-10-29 12:34:52

标签: android sharedpreferences

我的应用中有一个用户首选项,可供不同的活动使用。我想知道在我的应用程序中不同活动之间使用这些首选项的最佳方法。

我有这个想法从主活动创建共享首选项对象,并从那里发送意图到不同的活动来采取行动。那会有用吗?

或者只是继续从每个活动中调用getsharedpreferences() ..?

感谢。

4 个答案:

答案 0 :(得分:25)

通过意图发送共享首选项似乎过于复杂。您可以使用下面的内容包装共享首选项,并直接从您的活动中调用方法:

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

答案 1 :(得分:6)

您可以使用这种方式,并在您要使用的所有活动中声明具有相同名称的相同变量。

  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。

我不认为在意图中传递这种偏好会起作用。

答案 2 :(得分:0)

您当然可以在应用程序中使用共享首选项。

如果您的字符串不仅仅是字符串或int,那么您可以使用单例或扩展应用程序类,应用程序的所有活动都可以访问它。 =>这里没有磁盘访问权限只是留在记忆中。

答案 3 :(得分:0)

Kotlin 中,这是一个很好的解决方案–只需将代码复制并粘贴到新的const createTally = items => { const tally = {}; for (let i = 0; i < items.length; i++) { if (!tally[items[i]]) { tally[items[i]] = 0; } tally[items[i]]++; } return tally } console.log(createTally(['a', 'b', 'a']))文件中,然后执行4个TODO步骤在代码中概述:

AppPreferences.kt