2 woshiwoxingfu woshiwoxingfu 于 2012.09.21 13:22 提问

Android-怎么从PreferenceActivity 获得 SharedPreferences ?

我正在用PreferenceActivity来显示我应用程序的一些设置。我是通过xml文件设置的,所以我的onCreate(和完整的类方法)是像下边这样的:

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

这些参数将自动保存到SharedPreferences中,作为用户和他们一起起作用。为了得到SharedPreferences的一个实例,在这个activity中,将使用参数层级,为了这个activity,在同样的包中调用getDefaultSharedPreferences(android.content.Context)
但是我怎么样在另外一个activity中获得SharedPreference的名字?我只能调用在其他的activity中调用getSharedPreferences,但是我需要被PreferenceActivity使用的SharedPreference的名字。这个名字什么或者我怎么能够得到它?

3个回答

gouxiaojin
gouxiaojin   2012.09.21 14:08
已采纳
import android.preference.PreferenceManager;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// 然后你用
prefs.getBoolean("keystring", true);

许多应用程序可能都提供一个方法在一个特定的应用程序或者是一个activity中来捕获用户的参数。为了支持这个,android提供了一组简单的api。
参数是典型的成对的名称之。他们可以跨过一个应用程序的各种activities作为“Shared Preferences” 被存储(注意目前它不能跨进程共享)。或者它可能是一些需要特殊存储到一个activity中。
1.共享参数:共享参数可以被所有的组件(activities、services等等)脱离应用程序使用
2.activity处理参数:这些参数只能在activity中使用,不能被应用的其他组件使用。
共享参数:
共享参数在context类下的getSharedPreferences方法的帮助下是被托管的。参数是存储在一个默认的文件(1)中,或者你可以指定一个文件名(2)来存储参数。
这就是当你指定文件名称的时候如何获得示例

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

MODE_PRIVATE是操作模式的参数。它是默认的模式,而且意味着创建的文件夹只能被调用的应用程序访问。其他两个被支持的模式参数是MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE。在MODE_WORLD_READABLE中其他的应用程序可以读创建的文件夹但是不能修改。在MODE_WORLD_WRITEABLE中其他的应用程序也有写创建的文件夹的权限。
下边介绍的方法就是使用默认的模式,没有指定文件名

SharedPreferences preferences= PreferenceManager.getDefaultSharedPreferences(context);

最终,一旦你有了参数实例,这事你怎么从参数中检索到存储值:
为了在参数文件SharedPreference中存储值,必须要使用Editor对象。Editor是SharedPreference 类内嵌的接口。

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

Editor还支持像用remove() 和 clear()方法从文件中删除参数值。
Activity参数:
共享参数可以被其他应用程序组件使用。但是如果你不想和其他组件分享参数,想要有activity私有参数,你可以在activity的getPreferences() 方法的帮助下实现。getPreference 方法使用带着activity类名字的getSharedPreferences()方法给参数文件命名。。
下边的代码就是获得参数

SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);
The code to store values is also same as in case of shared preferences.

下边存储值得代码和共享参数的情况下一样

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

你也可以使用其他方法,就像在数据库中存储activity状态。注意android也包含了一个叫做android.preference的包。这个包定义了类来实现应用程序参数UI

woshiwoxingfu
woshiwoxingfu 你帮了我大忙了。网络上没有教程/示例讲关于这个的。所有的都是说关于abt的功能和自定义,但是不是如何读取它。
5 年多之前 回复
liangchichexin
liangchichexin   2012.09.21 14:42

如果你不能利用getDefaultSharedPreferenes(),你可以使用getSharedPreferences(name, mode) 代替,你只是必须传递正确的名字。
Android创建这个名字(可能是依据你的project的包的名字?)。你可以通过将下边的代码放到SettingsActivity onCreate里来得到它,然后看看preferencesName是什么。
String preferencesName = this.getPreferenceManager().getSharedPreferencesName();
这个字符串应该是像"com.example.projectname_preferences"的东西。在你的project中有一些固定值,向 getSharedPreferences()传递它,可能会起作用。

zlQQhs
zlQQhs   2013.02.26 14:22

http://blog.csdn.net/zlqqhs/article/details/8536118
一个详细的例子,还有讲到自定义Preference控件

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!