woshiwoxingfu 2012-09-21 05:22 采纳率: 100%
浏览 6219
已采纳

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 2012-09-21 06: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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办