Jay*_*ont 27 android android-fragments
我知道当你第一次实例化一个片段时,你可以使用传递参数setArguments(Bundle)并在片段中检索它们getArguments().
但是,在我的应用程序中,我有片段,在将它们添加到活动后将被分离并附加多次.在重新附加时,我可能需要传递一个片段参数来修改其内容,然后再重新附加它.我可以setArguments在第一次显示片段时使用,但在后续的情况下无法使用.该savedInstanceState不会在这种情况下工作,我不知道之前卸下片段参数的值.
我知道我可以在附加设置参数的片段之前实现一个我会调用的方法,但看起来这可能已经存在于API中而我只是没有看到它.
是否有内置的东西可以让我这样做,或者我必须自己实现这个?为了记录,我正在使用支持包(v4).
非常感谢!
use*_*046 23
是的,如果您在片段变为活动状态之前调用了setArguments(bundle).然后你的片段后面有一个你可以更新的包.要避免您的问题,您必须更新原始包,并且不得再次调用setArguments.所以在你的初始片段构造之后,用代码修改片段参数
frg.getArguments().putString("someKey", "someValue");
Run Code Online (Sandbox Code Playgroud)
然后,这些参数将在您的片段中提供,并将在方向更改等过程中保留和恢复.
请注意,在通过布局中的xml创建片段时,此方法也很有用.通常人们无法在这样的片段上设置参数; 避免这种限制的方法是创建一个无参数构造函数,它创建参数包,如下所示:
public MyFragment() {
this.setArguments(new Bundle());
}
Run Code Online (Sandbox Code Playgroud)
稍后在您的活动的onCreate方法中,您将执行以下操作:
FragmentManager mgr = this.getSupportFragmentManager();
Fragment frg = mgr.findFragmentById(R.id.gl_frgMyFragment);
Bundle bdl = frg.getArguments();
bdl.putSerializable(MyFragment.ATTR_SOMEATTR, someData);
Run Code Online (Sandbox Code Playgroud)
这会将数据放入参数包中,然后可以使用片段中的代码.
| 归档时间: |
|
| 查看次数: |
21069 次 |
| 最近记录: |