gpt4 book ai didi

android - 是否可以在将 fragment 添加到 Activity 后将参数传递给 fragment ?

转载 作者:IT老高 更新时间:2023-10-28 22:02:51 34 4
gpt4 key购买 nike

我知道,当您第一次实例化 fragment 时,您可以使用 setArguments(Bundle) 传递参数并使用 getArguments() 在 fragment 中检索它们.

但是,在我的应用程序中,我有 fragment 在添加到 Activity 后会被分离和附加几次。在重新附加时,我可能需要在重新附加之前向 fragment 传递一个参数以修改其内容。我可以使用 setArguments我第一次显示 fragment ,但在随后的情况下将不起作用。 savedInstanceState在这种情况下不起作用,因为在分离 fragment 之前我不知道参数的值。

我知道我可以在附加会设置参数的 fragment 之前实现一个我会调用的方法,但看起来这可能已经在 API 中,我只是没有看到它。

是否有内置的东西可以让我这样做,还是我必须自己实现?作为记录,我正在使用支持包 (v4)。

非常感谢!

最佳答案

是的,如果您在 fragment 激活之前调用了 setArguments(bundle)。然后你的 fragment 从那里有一个你可以更新的包。为避免您的问题,您必须更新原始包,并且不得再次调用 setArguments。因此,按照您的初始 fragment 构造,使用如下代码修改 fragment 参数

frg.getArguments().putString("someKey", "someValue");

然后参数将在您的 fragment 中可用,并将在方向更改等期间保持和恢复。

请注意,当在布局中通过 xml 创建 fragment 时,此方法也很有用。通常无法在这样的 fragment 上设置参数;避免这种限制的方法是创建一个无参数构造函数,它像这样创建参数包:

public MyFragment() {
this.setArguments(new Bundle());
}

稍后在您的 Activity 的 onCreate 方法中的某个地方,您将执行以下操作:

FragmentManager mgr = this.getSupportFragmentManager();
Fragment frg = mgr.findFragmentById(R.id.gl_frgMyFragment);
Bundle bdl = frg.getArguments();
bdl.putSerializable(MyFragment.ATTR_SOMEATTR, someData);

这会将数据放入参数包中,然后可用于 fragment 中的代码。

关于android - 是否可以在将 fragment 添加到 Activity 后将参数传递给 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9609738/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com