次のコードには2つfindpreference(key)
あり、最初のコードはinでonCreate()
あり、nullを返しますが、2番目のコードは設定を正しく返します。設定の要約を初期化するために最初にうまく機能する必要があります。私はさまざまな方法を試したり、ドキュメントを読んだり、グーグルで検索したりすることに多くの時間を費やしてきましたが、方法が見つかりませんでした。助けてください。
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がアクティビティのライフサイクルに沿ってnullであることが変数で確認できます。onSharedPreferenceChanged()
呼び出されるまで、settingsFragment / mPreferenceManager / mSharedPreferencesはsharedPreferecesを取得し、正常にfindpreference()
機能します。しかし、それが外で機能するための方法がわかりませんonSharedPreferenceChanged()
。