1

我有一堆从 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?

4

1 回答 1

1

看起来没有这样的方法(除了手动创建带有片段的活动,并处理保存首选项......嗯)。

但是,我以不同的方式解决了这个问题:

  1. 在每个片段的 onResume() 方法中,我得到一个默认 SharedPreferences 的实例。然后我检查影响我的设置项目可用性的首选项并相应地禁用/启用它们。

  2. 我为每个 PreferenceFragment 创建 OnSharedPreferenceChangeListener。因此,如果在同一片段中存在应该立即对用户可见的更改,则侦听器会完成这项工作。否则,可用性由其他片段的 onResume() 方法调节。

于 2013-07-31T14:45:01.357 回答