2014-08-27 28 views
3

我想在自定义首选项屏幕中显示首选项的值。为此,我需要在首选项片段中获取值,在这种情况下,字符串。在非片段(活动)中,我用例如final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);并获得与String phonenumber = prefs.getString("preference_name", null);的字符串,但在首选片段getDefaultSharedPreferences不适用于首选片段。如何获得偏好片段中的首选项值

任何想法如何解决这个问题?

这里是我的代码片段:

public class PreferencesFragment extends PreferenceFragment implements 
    OnSharedPreferenceChangeListener { 

TextView tvusername, tvphonenumber;  

@Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    addPreferencesFromResource(R.xml.preferences); 
    getPreferenceScreen().getSharedPreferences() 
      .registerOnSharedPreferenceChangeListener(this); 

    final SharedPreferences prefs = PreferenceManager 
      .getDefaultSharedPreferences(this); 


    // entering preference phonenumber in text view 
      String phonenumber = prefs.getString("phonenumber", null); 
      ; 
      tvphonenumber.setText(phonenumber); 

    // entering preference username in text view 
      String username = prefs.getString("username", null); 
      ; 
      tvusername.setText(username); 

} 
+0

将引用作为上下文的主机活动实例传递给您,例如,通过片段构造函数创建片段,然后使用其方法。 – user3455363 2014-08-27 16:20:25

+0

@ user3455363由于我仍然是一个newby我不确定如何实现这一点。所以我必须将'最后的SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);'放到我的托管活动中,然后呢?对不起,我的愚蠢问题 – sascha 2014-08-27 16:31:15

+0

在你的片段前创建字段。上下文hostActivity;然后将参数添加到相同类型的cunstructor - 上下文,并且当你从活动中调用新的PreferencesFragment来代替类型的参数Context use关键字this – user3455363 2014-08-27 16:35:13

回答

7

在onActivityCreated(这是当创建活动的时间)的片段类的,你做

Context hostActivity = getActivity(); 
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(hostActivity); 

这就是你如何从访问hostActivity附加片段。

+3

谢谢,这对我来说诀窍 – sascha 2014-08-27 17:22:25

+0

Awsome!Searched正是为了这个!;) – 8m47x 2015-06-24 13:47:15