我使用一个PreferenceActivity显示出一些设置为我应用程序。我膨胀的设置通过xml文件,以便我onCreate(并完成类方法)看起来是这样的:

public class FooActivity extends PreferenceActivity {
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        addPreferencesFromResource(R.xml.preference);
    }
}

对如果是的话,为什么不试的 PreferenceActivity PreferenceFragment

这些优先选择将自动保存,以控制你的电话和报文统计信息的用户相互作用。检索的一个实例,控制你的电话和报文统计信息的优先层次在这一活动将使用,呼getDefaultSharedPreferences(序。内容。下文),与上下文中相同的软件包作为这项活动。

但是我怎么得到的名称SharedPreference在另一个活动吗?我只能呼叫

getSharedPreferences(name, mode)

在其他活动的但是我需要的名称SharedPreference这是所使用的PreferenceActivity.的名称是什么,或如何我可以找回它?

有帮助吗?

解决方案

import android.preference.PreferenceManager;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// then you use
prefs.getBoolean("keystring", true);

更新

根据 共同的偏好|安卓开发教程(第13) 通过西蓝波M N,

许多应用程序可提供一种方式来捕捉户上的首选项 设置一个具体的应用程序或活动。为支持 这样,安卓提供了一套简单的Api。

首都名称通常价值对。他们可以储存为 "共有的偏好"跨越各种活动中的应用程序(注意 目前,它无法共享跨过程)。或者也可以 一些需要加以储存的具体活动。

  1. 共同喜好:共享的偏好可以使用的所有组成部分(活动、服务等)的应用程序。

  2. 活动处理的偏好:这些偏好只能用于在特定活动和不能用于其他部件的应用程序。

共同喜好:

共享的偏好管理的帮助 getSharedPreferences 方法 Context 类。首都储存在一种默认文件 (1) 或者你可以指定的文件名 (2) 是用来参考的偏好。

(1) 建议的方式 是使用的默认方式,不指定的文件名

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);

(2)在这里是你是怎么得到的实例时,指定的文件名

public static final String PREF_FILE_NAME = "PrefFile";
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);

MODE_PRIVATE 是的操作方式的偏好。它是默认的方式和手段的创建文件将访问仅通过调用的应用程序。其他两个模式支持的 MODE_WORLD_READABLEMODE_WORLD_WRITEABLE.在 MODE_WORLD_READABLE 其他应用程序可以读取的创建文件但不能修改它。在情况下 MODE_WORLD_WRITEABLE 其他应用程序也已经写入权限的创建文件。

最后,一旦你有偏好的实例,这是可以如何 检索的储存价值 从偏好:

int storedPreference = preferences.getInt("storedInt", 0);

储存价值 在偏好文件 SharedPreference.Editor 对象具有使用。 Editor 是一种嵌套的接口 SharedPreference 类。

SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

编辑也支持的方法一样 remove()clear() 删除偏好值的文件。

活动:

共享的偏好可以使用的其他程序组成。但是,如果你不需要分享喜好与其他部件,并希望有活动的私人喜好,你可以那样做有帮助的 getPreferences() 方法的活动。的 getPreference 方法的使用 getSharedPreferences() 方法与活动的名称类优先文件的名称。

以下是代码,以获得的喜好

SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);

代码存储值也是同样情况下共享的偏好。

SharedPreferences preferences = getPreference(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

你也可以使用其他方法,如储存的活动状态的数据库。注意到安卓还包含一个包裹叫 android.preference.包定义类应用来实现的偏好的用户界面。

看到一些更多的例子检查的 数据储存 员额在开发网站。

其他提示

如果您没有访问getDefaultSharedPreferenes(),您可以使用getSharedPreferences(name, mode)相反,你只需要在正确的名称来传递。

Android的创建这个名称(可能基于项目的包叫什么名字?)。您可以通过将在SettingsActivity onCreate()下面的代码,看到preferencesName是什么得到它。

String preferencesName = this.getPreferenceManager().getSharedPreferencesName();

的字符串应该是这样com.example.projectname_preferences。硬代码,在某处你的项目,并把它传递到getSharedPreferences(),你应该是好去。

第一声明这些方法..

public static void putPref(String key, String value, Context context) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString(key, value);
    editor.commit();
}

public static String getPref(String key, Context context) {
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    return preferences.getString(key, null);
}

然后,当你想要把一个PREF称之为:

putPref("myKey", "mystring", getApplicationContext());

当你想获得一个PREF称之为:

getPref("myKey", getApplicationContext());

可以使用该对象 HTTPS: //github.com/kcochibili/TinyDB--Android-Shared-Preferences-Turbo 这进一步简化了一切

示例:

TinyDB tinydb = new TinyDB(context);

tinydb.putInt("clickCount", 2);
tinydb.putFloat("xPoint", 3.6f);
tinydb.putLong("userCount", 39832L);

tinydb.putString("userName", "john");
tinydb.putBoolean("isUserMale", true); 

tinydb.putList("MyUsers", mUsersArray);
tinydb.putImagePNG("DropBox/WorkImages", "MeAtlunch.png", lunchBitmap);

不必通过上下文到处是真的讨厌我。该代码变得太冗长和难以管理。我这样做的每一个项目,而不是...

public class global {
    public static Activity globalContext = null;

和设置在主活动创建

@Override
public void onCreate(Bundle savedInstanceState) {
    Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler(
            global.sdcardPath,
            ""));
    super.onCreate(savedInstanceState);

    //Start 
    //Debug.startMethodTracing("appname.Trace1");

    global.globalContext = this;

也是所有首选项键是独立于语言,我震惊了,没有人提到。

getText(R.string.yourPrefKeyName).toString()

现在请很简单地像这样在一个代码行

global.globalContext.getSharedPreferences(global.APPNAME_PREF, global.MODE_PRIVATE).getBoolean("isMetric", true);

如果你有一个复选框,你想在任何Java文件以获取它的值,即真/假 -

使用 -

Context mContext;
boolean checkFlag;

checkFlag=PreferenceManager.getDefaultSharedPreferences(mContext).getBoolean(KEY,DEFAULT_VALUE);`

<强>已更新2019

可以简单地使用PowerPreference文库

https://github.com/AliEsaAssadi/Android-Power-Preference

获取共享偏好实例

要得到你只需要调用默认实例

PowerPreference.getDefaultFile()

或者,如果你想有一个特定的偏好设置文件

PowerPreference.getFileByName(fileName)

书写数据:

PowerPreference.getDefaultFile().put(key,value)

获取数据

PowerPreference.getDefaultFile().getString(key,value)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top