Android:滑动视图中的碎片

时间:2013-12-26 09:28:50

标签: android android-fragments tabs fragment android-tabs

我有一个包含3个标签的活动。选项卡A,选项卡B,选项卡C.选项卡A从服务器加载数据。选项卡B和C上带有按钮的文本字段。每个选项卡都使用不同的片段实现。

我的问题是当我在选项卡B中键入文本字段并滑动到选项卡C时,选项卡B中的文本字段不会被清除。我希望它能被清除。当我滑动到选定的标签时,有没有办法重新创建或重新加载片段?

对于选项卡A完成从服务器加载数据需要一些时间,因此我在操作运行时创建了一个进度对话框。现在,进度对话框可正常工作,但如果我从选项卡A切换到选项卡B再切换到选项卡C返回选项卡B,则会显示进度对话框。进度对话框显示在选项卡A的片段的onCreateView()方法中。我不明白这是如何实现的。我认为这是因为即使我在不​​同的标签上,片段仍在运行。当用户滑动到选定的选项卡时,片段是否可以仅运行/启动?另外,我是否应该在onTabUnSelected()方法中运行任何代码?有没有办法在该方法中结束片段?

编辑:

我想出了当我离开片段时如何清除文本字段。我压倒了以下内容: 公共类MyFragment扩展了Fragment

@Override
public void setMenuVisibility(final boolean visible) {
    super.setMenuVisibility(visible);
    if (!visible) {
        ...
    }
}

现在,当我从选项卡滑动到选项卡时,文本字段将被清除。我不确定这是否是解决问题的最佳方法,所以如果其他人有更好的方法,请告诉我。我尝试在另一个片段中实现相同的功能,以在片段不可见时关闭对话框,但它不起作用。

编辑2:

出于某种原因,当从Tab C滑动到选项卡B时,正在运行片段A的onCreateView()方法。片段A加载在选项卡A上。不应该是片段A的onCreateView()方法只有在选择标签A时才会运行?

编辑3:

我发现了什么问题。 Android会自动将setOffscreenPageLimit(int)的值设置为setOffscreenPageLimit(1)。这会自动加载后台的下一个选项卡。因此,作为一种解决方法,我将在屏幕上创建一个进度条/微调器,而不是创建一个进度对话框。

1 个答案:

答案 0 :(得分:0)

我会逐一尝试回答你的问题。

  1. 请参阅this linkthis link,了解如何在片段之间进行通信。我找到了第二个链接(vogella)更有用的练习。
  2. 它非常好,在选项卡A在后台工作时,在滑动到选项卡B和C时。您需要了解所有3个选项卡属于一个可能包含三个不同片段的活动。