【发布时间】:2013-02-27 08:24:02
【问题描述】:
在下一个代码中有两个findpreference(key),第一个在onCreate() 中,它返回null,但第二个正确返回首选项。我需要第一个很好地初始化首选项摘要。我花了很多时间尝试不同的方法,阅读文档和谷歌搜索,但我没有找到方法,请帮助。
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() 之外工作。
【问题讨论】:
标签: android settings android-preferences