在下一個代碼中有兩個findpreference(key)
,第一個在onCreate()
,它返回null,但第二個返回正確的偏好。我需要第一個很好的工作來初始化首選項摘要。我花了很多時間嘗試不同的方式,閱讀文檔和使用谷歌搜索,但我沒有找到方法,請幫助。設置Android 3.0+的偏好設置的初始摘要
public class Settings30Activity extends PreferenceActivity implements OnSharedPreferenceChangeListener {
protected SettingsFragment settingsFragment;
@SuppressLint("NewApi")
@TargetApi(11)
public static class SettingsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
settingsFragment = new SettingsFragment();
//findPreference 1 (returns null):
Preference stylePref=settingsFragment.findPreference("pref_style");
stylePref.setSummary(sharedPreferences.getString(key, ""));
}
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals("pref_style")) {
//findPreference 2(returns the preference ok):
Preference stylePref=settingsFragment.findPreference("pref_style");
stylePref.setSummary(sharedPreferences.getString(key, ""));
}
}
}
調試時,我可以在變量如何對象settingsFragment/mPreferenceManager是沿着活動的生命週期無效,直到onSharedPreferenceChanged()
只是調用然後settingsFragment/mPreferenceManager/mSharedPreferences得到sharedPrefereces看到和findpreference()
效果很好。但我不知道該怎麼辦,因爲它在onSharedPreferenceChanged()
之外。
對不起,我的代碼我是直接找「pref_style」在這兩種情況下,而不是主要的,所以這是不事情。謝謝您的回答!在debbuging時,我可以在變量中看到對象settingsFragment/mPreferenceManager在活動生命週期中是如何爲空的,直到剛剛調用onSharedPreferenceChanged()時,settingsFragment/mPreferenceManager/mSharedPreferences獲得了sharedPrefereces和findpreference()的效果。但是我不知道該如何處理它在SharedPreferenceChanged()之外的作品。 – user23 2013-03-12 09:21:55
這很奇怪,因爲'mPreferenceManager'是在'PreferenceFragment'的'onCreate()'方法中初始化的。你是否嘗試在'settingsFragment'的'onCreate()'中設置總結(然後調試)?順便說一句,你的第一個電話之後的'sharedPreferences'從哪裏來? – saschoar 2013-03-12 10:41:18
是的!在settings的片段onCreate()中設置sumar而不是在Activity的onCreate()中是解決方案。現在完美!謝謝saschoar! – user23 2013-03-12 17:16:21