在接下来的代码中有两个findpreference(key)
,第一个是 in 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()
。