在下一个代码中有两个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