我有一堆从 XML 文件加载资源的 PreferenceFragments。
在某些情况下,此片段中的某些设置应该无法访问。
当我把所有东西都放在一个片段中时,这很好。然而,当我把它分成不同的片段时,它就成了问题。
我有一些字段是指特定片段中的首选项。例如:
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。我知道这是错误的方式,这可能是我的 Listener 什么都不做或在 NPE 上崩溃的原因。但正确的方法是什么?如何访问 FragmentPreference 中的特定首选项以禁用它?
或者我可以在 OnSharedPreferenceChangeListener 中使用 findPreference,无论片段如何,它都会返回正确的 Preference?