java - setPreferencesFromResource 与 addPreferencesFromResource

标签 java android android-fragments

这个问题比程序更学术。我的首选项屏幕显示并工作正常,但在查找 AppCompatPreferenceActivity 正确实现的各种示例时,我发现人们在他们的示例代码中以不同方式处理加载 XML 设置的资源。

我只使用一个简单的设置设置,所有设置都在一个 PreferenceScreen 和类别中,但 PreferenceFragmentCompat 似乎仍然是最合适和最通用的方法,为 future 留下更多选择。稍后我可能会或可能不会添加更多设置和/或类别。

我的问题是,鉴于上述参数,使用一个调用优于另一个调用(setPreferencesFromResource 与 addPreferencesFromResource)是否有任何优点或缺点。

我都试过了:

public class PreferenceFragmentCustom extends PreferenceFragmentCompat
{
  @Override
  public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
  {    
    setPreferencesFromResource(R.xml.app_preferences, rootKey);
  }
}

public class PreferenceFragmentCustom extends PreferenceFragmentCompat
{
  @Override
  public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
  {
    addPreferencesFromResource(R.xml.app_preferences);
  }
}

但是,它们的工作原理似乎相同(请记住,我不会交换不同的偏好 fragment ,将来可能会也可能不会)。

同样,鉴于上述情况,我想问是否有任何理由选择一种方法来加载 XML 设置的资源而不是另一种方法(setPreferencesFromResource 与 addPreferencesFromResource)。

提前谢谢你。

最佳答案

他们做不同的事情,看看docs

addPreferencesFromResource :扩充给定的 XML 资源并将首选项层次结构添加到当前首选项层次结构。

setPreferencesFromResource:扩充给定的 XML 资源并替换当前首选项层次结构(如果有的话)为以键为根的首选项层次结构。

所以基本上,如果您有一个应用程序,您希望用户在执行某些操作甚至更改设置后看到更改的首选项,那么您应该使用 setPreferences 来实现更改。

如果您的应用程序很大并且有各种功能,每个功能都有自己的设置,那么 addPreferences 可以帮助您不必一次编写整个首选项 xml,而是让它有机地增长,每个功能都有自己的首选项 xml fragment

这只是两个示例,其中这两种方法的功能之间的区别可能会派上用场,但我相信还有更多。

如果在您的情况下您真的不在乎并且您只有一个偏好 fragment ,我想这真的无关紧要。从技术上讲,我猜 setPreferences 会是“更正确”的方法,但这两种方法都是同一个库的一部分,而且正如您所说,在某种程度上它们的功能是重叠的,所以谁在乎 XD

关于java - setPreferencesFromResource 与 addPreferencesFromResource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60840848/

相关文章:

java - 将 DecimalFormat 与 ThreadLocal 结合使用会对性能产生哪些影响?

java - 在 SQLite 数据库中搜索

android - 如何在 android firebase 中保持登录状态和注销状态?

java - 通用动画叠加 View 的枢轴不起作用

android - 如何动态设置FrameLayout的宽度和高度android?

android - Navigation Drawer 使用的最佳实践

java - 控制Android Java线程

java - 记录器输出到字符串

android - fragment 中的上下文操作模式未显示

java - 有没有办法在 Spring Batch 中调用 writer 之前拦截并注入(inject)另一个对象?