Android 正在使用旧值调用片段onCreateView()

Android 正在使用旧值调用片段onCreateView(),android,fragment,Android,Fragment,我有一个活动,我在活动布局xml的FrameLayout中加载片段。我有两个片段:ListFragment和PreferenceFragment ListFragment使用ArrayAdapter并显示作为类变量并填充在ArrayAdapter构造函数中的数组。其中包含存储在数据库中的日期 现在,当用户单击ActionBar中的preferences按钮时,ListFragment被PreferenceFragment替换。在这里,我允许用户更改日期格式 到目前为止还不错 现在,当用户按bac

我有一个活动,我在活动布局xml的
FrameLayout
中加载片段。我有两个片段:
ListFragment
PreferenceFragment

ListFragment
使用
ArrayAdapter
并显示作为类变量并填充在ArrayAdapter构造函数中的数组。其中包含存储在数据库中的日期

现在,当用户单击ActionBar中的preferences按钮时,
ListFragment
PreferenceFragment
替换。在这里,我允许用户更改日期格式

到目前为止还不错

现在,当用户按back
PreferenceFragment
返回时,我覆盖
活动.onBackPressed()
以将
PreferenceFragment
替换为
列表fragment

在这里,我仍然看到旧格式的日期,用户选择的设置没有反映出来。调试时,我看到
ListFragment.onCreateView()
被调用了两次。第一次使用用户刚刚选择的新日期格式加载新加载的数组时。第二次加载旧的日期数组(它以某种方式保存了该数组!)

我只在
活动.onCreate()
活动.onBackPressed()中使用了
FragmentTransaction.replace()

我花了一整天的时间来弄清楚这件事。根据,这不应该发生,因为我正在使用replace。我在网上找不到任何东西。如有任何建议,我们将不胜感激

更新:根据,只有使用Arrayadpaters自己的添加、清除等方法更新列表时,
ArrayAdapter.onNotifyDatasetChanged()
才会生效。现在在
ListFragment.onResume()
中,我调用
adapter.clear()
adapter.addAll(sqliteclass.getArray())
。这是可行的,但我现在在
onCreate()
onResume()
中对数据库进行了2次访问

  • 无需覆盖
    onBackPress()
    来撤销
    碎片事务

    只需在
    FragmentTransaction
    上调用
    addToBackStack()
    ,将列表替换为首选项即可
  • 尝试在您的
    列表片段的
    onResume()
    中的
    ListAdapter
    上调用
    notifyDataSetChanged()
    。这将强制重新创建项目的视图

  • 这没有帮助。不知何故,旧格式仍然会显示出来!说明
    notifyDataSetValidated()
    没有任何作用..抱歉,
    notifyDataSetChanged()
    是我想要建议的。仍然是一样的:(…不确定有什么问题。如果您还有建议,请告诉我!谢谢您的时间。