Android 正在使用旧值调用片段onCreateView()
我有一个活动,我在活动布局xml的Android 正在使用旧值调用片段onCreateView(),android,fragment,Android,Fragment,我有一个活动,我在活动布局xml的FrameLayout中加载片段。我有两个片段:ListFragment和PreferenceFragment ListFragment使用ArrayAdapter并显示作为类变量并填充在ArrayAdapter构造函数中的数组。其中包含存储在数据库中的日期 现在,当用户单击ActionBar中的preferences按钮时,ListFragment被PreferenceFragment替换。在这里,我允许用户更改日期格式 到目前为止还不错 现在,当用户按bac
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()
是我想要建议的。仍然是一样的:(…不确定有什么问题。如果您还有建议,请告诉我!谢谢您的时间。