java - 如何从 Android 中的 PreferenceActivity 获取 SharedPreferences?

标签 java android sharedpreferences preferenceactivity

我正在使用 PreferenceActivity 来显示我的应用程序的一些设置。我正在通过 xml 文件对设置进行扩充,以便我的 onCreate(和完整的类方法)看起来像这样:

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

PreferenceActivity的javadoc PreferenceFragment声明

These preferences will automatically save to SharedPreferences as the user interacts with them. To retrieve an instance of SharedPreferences that the preference hierarchy in this activity will use, call getDefaultSharedPreferences(android.content.Context) with a context in the same package as this activity.

但是我如何在另一个 Activity 中获取 SharedPreference 的名称?我只能打电话

getSharedPreferences(name, mode)

在其他 Activity 中,但我需要 PreferenceActivity 使用的 SharedPreference 的名称。名称是什么或如何检索?

最佳答案

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

更新

根据Shared Preferences | Android Developer Tutorial (Part 13)作者:Sai Geetha M N,

Many applications may provide a way to capture user preferences on the settings of a specific application or an activity. For supporting this, Android provides a simple set of APIs.

Preferences are typically name value pairs. They can be stored as “Shared Preferences” across various activities in an application (note currently it cannot be shared across processes). Or it can be something that needs to be stored specific to an activity.

  1. 共享偏好:共享偏好可供应用程序的所有组件( Activity 、服务等)使用。

  2. Activity 处理的首选项:这些首选项只能在特定 Activity 中使用,不能被应用程序的其他组件使用。

共享偏好:

共享首选项通过 Context 类的 getSharedPreferences 方法进行管理。首选项存储在默认文件 (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 对象。 EditorSharedPreference 类中的嵌套接口(interface)。

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

Editor 还支持 remove()clear() 等方法从文件中删除首选项值。

Activity 偏好:

其他应用程序组件可以使用共享首选项。但是,如果您不需要与其他组件共享首选项并希望拥有 Activity 私有(private)首选项,则可以借助 Activity 的 getPreferences() 方法来实现。 getPreference 方法使用 getSharedPreferences() 方法,并将 Activity 类的名称作为首选项文件名。

以下是获取偏好的代码

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

您还可以使用其他方法,例如将 Activity 状态存储在数据库中。注意 Android 还包含一个名为 android.preference 的包。该包定义了类来实现应用程序首选项 UI。

要查看更多示例,请查看 Android 的 Data Storage在开发者网站上发布。

关于java - 如何从 Android 中的 PreferenceActivity 获取 SharedPreferences?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2614719/

相关文章:

java - Java中如何动态创建类并实例化?

java - 在哪里放置属性文件,以便 java 命令将在类路径中看到它

java - Android 从另一个类更新布局

java - 改造错误 com.google.gson.JsonSyntaxException : java. lang.IllegalStateException:应为 BEGIN_OBJECT 但在第 1 行第 1 列路径 $

android - extractThumbnail 生成未知位图配置错误

android - gradle 和 gradle-experimental 有什么区别?

java - 不保留 CheckBoxPreference 中的值

Java - 使用大型 Excel 进行读取、处理、写入

redux - 如何从共享首选项设置 initialState?

android - 从 SharedPreferences 中删除条目 - Android