使用旧值调用片段onCreateView()

时间:2014-02-23 07:56:10

标签: android fragment

我有一个Activity,我在活动布局xml中的FrameLayout中加载片段。我有2个片段:ListFragmentPreferenceFragment

ListFragment使用ArrayAdapter并显示数组,它是一个类变量,并填充在ArrayAdapter的构造函数中。它包含存储在数据库中的日期。

现在,当用户点击操作栏中的“偏好设置”按钮时,ListFragment将替换为PreferenceFragment。在这里,我允许用户更改日期格式。

到目前为止一切顺利。

现在,当用户按返回以从PreferenceFragment返回时,我会覆盖Activity.onBackPressed()以将PreferenceFragment替换为ListFragment

在这里,我仍然看到旧格式的日期,并且未反映用户选择的设置。经过调试,我发现ListFragment.onCreateView()被称为两次。第一次使用用户刚刚选择的新日期格式加载新加载的数组。第二次加载旧的日期数组(以某种方式保存它!)。

我仅在FragmentTransaction.replace()Activity.onCreate()中使用Activity.onBackPressed()

我花了一整天才弄明白这一点。根据{{​​3}},这不应该发生,因为我使用替换。我无法在网上找到任何东西。任何建议都表示赞赏。

更新:根据thisArrayAdapter.onNotifyDatasetChanged()仅在使用Arrayadpaters自己的add,clear等方法更新列表时生效。现在在ListFragment.onResume()我呼叫adapter.clear()adapter.addAll(sqliteclass.getArray())。这有效,但我现在正在onCreate()onResume()对数据库进行 2次

1 个答案:

答案 0 :(得分:0)

  1. 无需覆盖onBackPress()即可撤销FragmentTransaction 只需在addToBackStack()上调用FragmentTransaction,然后使用首选项替换列表。
  2. 尝试在notifyDataSetChanged() ListAdapter的{​​{1}}上致电onResume()。这应该强制重新创建项目的视图。