1
public class SettingsActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_settings); 
    getFragmentManager().beginTransaction() 
      .add(R.id.settingsContainer, new SettingsFragment()) 
      .commit(); 
} 

public static class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preferences); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); 
    } 

    @Override 
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
     if (key.equals("aKey") { 
      Preference pref = findPreference(key); 
      pref.setSummary(sharedPreferences.getString(key, "")); 
     } 
    } 
} 
} 

當用戶更改他的首選項時,它們被存儲並由偵聽器顯示。 當活動重新啓動時,我丟失了所有摘要,但是值正確存儲,因爲如果點擊每個首選項,就會檢索到它們。 我想顯示之前完成的操作,而不是默認值。Android:如何初始化PreferenceFragment中的所有摘要

回答

0

的片段創建時,可以調用下面的方法:

addPreferencesFromResource(R.xml.preferences) 

的如果XML文件內容的偏好是固定的,並且在更換偏好文件時接受onSharedPreferenceChanged。 你可以用方法getActivity().getSharedPreferences()得到數值。

1

在註冊偵聽器後的onResume()方法中,只需使用每個首選項調用偵聽器即可。

@Override 
public void onResume() { 
    super.onResume(); 
    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); 
    onSharedPreferenceChanged(getPreferenceScreen().getSharedPreferences(), "your_key"); 
}