gpt4 book ai didi

android - 如何从 OnSharedPreferenceListener 访问特定 fragment 的 Preference 对象?

转载 作者:行者123 更新时间:2023-11-30 03:27:48 25 4
gpt4 key购买 nike

我有一堆 PreferenceFragments,它们从 XML 文件加载它们的资源。

在某些情况下,此 Fragments 中的某些设置应该无法访问。

当我将所有内容都放在一个 Fragment 中时,一切都很好。然而,当我把它分成不同的 fragment 时,它就成了问题。

我有一些字段是指特定 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");
}
}

如您所见,我在创建时保存了对 fragment 实例的静态引用,并在我的 OnSharedPreferenceChangeListener 中引用了特定字段,如 GeneralPrefFragment.fragment.mDockModePreference。我知道这是错误的方式,并且可能是我的 Listener 什么都不做或与 NPE 崩溃的原因。但什么是正确的方法?如何访问 FragmentPreference 中的特定首选项以禁用它?

或者我可以在 OnSharedPreferenceChangeListener 中使用 findPreference,它会返回正确的 Preference,而不管 Fragment 是什么?

最佳答案

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

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

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

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

关于android - 如何从 OnSharedPreferenceListener 访问特定 fragment 的 Preference 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17956183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com