XML ファイルからリソースをロードする一連の PreferenceFragments があります。
このフラグメントの一部の設定は、場合によってはアクセスできないはずです。
1 つの Fragment にすべてが含まれていたときは、問題ありませんでした。しかし、別のフラグメントに分割すると、問題が発生しました。
特定のフラグメントの設定を参照するフィールドがいくつかあります。例えば:
public class GeneralPrefFragment extends PreferenceFragment {
public Preference mExpandDockPreference;
public Preference mDefaultPagePreference;
public Preference mDockModePreference;
public static GeneralPrefFragment fragment;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.general_settings);
fragment=this;
Debug.d("Assigning fragment");
if(fragment==null) {
Debug.d("Fragment is null");
}
mExpandDockPreference=findPreference("dockStateDefault");
mDefaultPagePreference=findPreference("defaultPage");
mDockModePreference=findPreference("dockMode");
}
}
ご覧のとおり、作成時にフラグメントのインスタンスへの静的参照を保存し、OnSharedPreferenceChangeListener で GeneralPrefFragment.fragment.mDockModePreference のような特定のフィールドを参照します。私はそれが間違った方法であることを理解しています。おそらくそれが私のリスナーが何もしないか、NPE でクラッシュする理由です。しかし、正しい方法は何ですか?FragmentPreference 内の特定の設定にアクセスして無効にするにはどうすればよいですか?
または、OnSharedPreferenceChangeListener で findPreference を使用すると、フラグメントに関係なく適切な設定が返されますか?