如何更新使用FragmentPagerAdapter创建的所有选项卡中的控件?

时间:2014-01-22 07:51:19

标签: android android-fragments android-tabs fragmentpageradapter

我使用android.support.v4.view.PagerAdapter创建了一个标签式android应用程序。

应用程序中有大约七个选项卡,我计划添加更多选项卡。每个选项卡都包含许多控件(TextView,Spinners,Toggle按钮,复选框等)。

在第一个标签上有一个下拉菜单以选择个人资料。用户可以“加载”或“保存”他想要的个人资料。

配置文件包含选项卡中所有控件的数据,我需要更新所有选项卡中的UI控件。

我从配置文件加载了所有数据,但UI控件没有得到更新。

有一个'UpdateUI'函数调用'set'函数(通过ID查找其视图后,各个控件的setText,setChecked等)。

我被告知只有三个选项卡(Previous,Current和Next)保存在内存中,因此我编写了应用程序,只有当用户滑动到该特定选项卡时,才会调用'UpdateUI'函数来设置UI数据(搞清楚)活跃片段)。

使用DDMS日志我看到加载的数据是正确的,但'setText'或'setXXXXX'函数不会更新片段选项卡。

我还检查了几个可能的问题:

  1. “OnTextChanged”或“OnListener”再次更新数据的可能性。
  2. 确保从UI线程调用'UpdateUI'。
  3. 使用通知数据更改和重绘UI来确保更新UI。
  4. 我是Java / Android程序员的新手。请指出我正确的方向。

2 个答案:

答案 0 :(得分:1)

viewpager.setOffscreenPageLimit(size);

您可以通过设置限制来实例化所有片段,然后您可以更新其他片段中的所有小部件。

答案 1 :(得分:1)

如果我对Android片段管理的理解是正确的,一旦片段对用户变得不可见(比如说其他一些片段完全覆盖它或在你的情况下更改标签)片段经历onPause和可能的onStop生命周期阶段,这意味着它是亲切的hybernated并且在它变得可见之前不能被改变。 viewpager.setOffsetPageLimit(size)告诉片段管理器(或者更确切地说是pageAdapter)应该保留多少片段,并且我怀疑它会改变什么,但是让我知道它是否是,因为否则解决方案可能会更复杂。

我要做的是每次用户看到它并将你的配置文件数据传递给它的构造函数(或者更好地练习newInstance()静态方法)时重新创建一个片段,它实际上会节省内存,因为它保留了很多片段可能是压倒性的。或者,您可以检查每次片段调用onResume时选择的配置文件,并在那里更新您的控件。