我们可以在Fragment上调用两次setArgument()吗?

时间:2016-03-10 08:58:52

标签: android android-fragments

我在活动中持有两个Fragment实例,将第一个片段添加到activity,然后使用setArgument()和addBackStack()将第二个片段替换为activity,然后按返回按钮。现在我们返回第一个片段,然后我们首先替换活动再次保持的第二个片段,与setArgument()相同,并抛出异常----片段已经激活。 这个过程有什么问题?

2 个答案:

答案 0 :(得分:0)

您可以多次或多次调用如果 Fragment未附加到任何Activity

以下代码是从Fragment.java

复制的
/**
 * Supply the construction arguments for this fragment.  This can only
 * be called before the fragment has been attached to its activity; that
 * is, you should call it immediately after constructing the fragment.  The
 * arguments supplied here will be retained across fragment destroy and
 * creation.
 */
 public void setArguments(Bundle args) {
        if (mIndex >= 0) {
            throw new IllegalStateException("Fragment already active");
        }
        mArguments = args;
 }

只要您希望IF不附加到活动

,您就可以调用该方法

答案 1 :(得分:0)

根据setArguments()源文档,提供的参数将在片段销毁和创建中保留。因此,使用getArguments()然后放置bundle值来更改字段。