2014-08-27 45 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