我正在使用PreferenceActivity来显示我的应用程序的一些设置.我通过一个xml文件来扩展设置,因此我的onCreate(和complete类方法)如下所示:

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

PreferenceActivityPreferenceFragment的javadoc声明:

当用户与这些首选项交互时,这些首选项将自动保存到SharedPreferences.要检索此活动中的首选项层次 struct 将使用的SharedPreferences的实例,请使用与此活动相同的包中的上下文调用getDefaultSharedPreferences(android.content.Context).

但是我如何在另一个活动中获得共享引用的名称呢?我只能打电话

getSharedPreferences(name, mode)

但是我需要由Preference enceActivity使用的SharedPreference的名称.名称是什么,或者我如何检索它?

推荐答案

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

Update

根据Sai Geetha M N的Shared Preferences | Android Developer Tutorial (Part 13)

许多应用程序可能会提供一种方法来捕捉用户在网络上的偏好

首选项通常是名称-值对.它们可以存储为

  1. 共享首选项:应用程序的所有组件(活动、服务等)都可以使用共享首选项.

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

Shared Preferences:

共享首选项在Context类的getSharedPreferences方法的帮助下进行管理.首选项存储在默认文件(1)中,或者您可以指定用于参考首选项的文件名(2).

(1) The recommended way将在默认模式下使用,而不指定文件名

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个应用程序,其他应用程序也对创建的文件具有写入权限.

最后,一旦有了preferences实例,下面是如何从preferences中 Select retrieve the stored values:

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

必须使用首选项文件SharedPreference.Editor中的对象.EditorSharedPreference类中的嵌套接口.

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

编辑器还支持像remove()clear()这样的方法来从文件中删除首选项值.

Activity Preferences:

共享首选项可由其他应用程序组件使用.但是,如果您不需要与其他组件共享首选项,并且希望拥有活动专用首选项,那么可以借助活动的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还包含一个名为android.preference的软件包.该包定义实现应用程序首选项UI的类.

要查看更多示例,请查看开发者网站上Android的Data Storage条帖子.

Java相关问答推荐

RDX触发ChoiceBox转换器(并按字符串值排序)

如何用javac编译Java类,即使对像java.lang.*这样的基本类也没有任何依赖关系?

@从类文件中删除JsonProperty—Java

Springdoc Whitelabel Error Page with Spring V3

Apache POI:使用反射获取zoom 级别

为什么Java的代码工作(if condition内部的实例)

Java .类参数不通过构造函数传递

为什么我的ArrayList索引的索引总是返回-1?

Exe4j创建的应用程序无法再固定在任务栏Windows 11上

无法在WebSocket onMessage中捕获错误

Spring Boot@Cachebale批注未按预期工作

对Java中的通配符参数的混淆

更新GWT 2.5.1到2.11.0和sencha GXT 3.1.1到4.1时出现错误

生成桥方法以解决具有相同擦除的冲突方法

如何使用WebEnvironment.RANDOM_PORT获得第二个随机端口?

为什么使用lo索引来解决二进制搜索问题不同于使用hi索引?

[jdk21][Foreign Function&;Memory API]MemoryLayout::varHandle通过可变数组进行 struct 化的问题

多线程、并发和睡眠未按预期工作

JavaFX中ListView中的问题

在数组列表中找到对象后,未从数组中删除对象