我有一个AudioPlayerFragment用setArguments()传递一些url的东西.
如果我的实例中有一个url密钥,我会启动一个播放音频流的服务.如果已经播放了一个流,我会停止它并使用新流再次启动它.getArguments()AudioPlayerFragment
如果没有争论,我什么都不做.
我的问题是参数与实例保持一致,所以当我回到它时getArguments(),如果没有设置新的,则返回最新的参数集.
所以在阅读它们之后,我尝试将参数设置为null
setArguments(null);
Run Code Online (Sandbox Code Playgroud)
但我明白了
Java.lang.IllegalStateException: fragment already active
Run Code Online (Sandbox Code Playgroud)
那我怎么能清除这些论点呢?
And*_*Res 10
确保您正在阅读getArguments()的onCreate()片段的方法.一旦片段被创建,当你回去时你不会通过低谷onCreate(),所以你不应该再次阅读这些论点.
如果这仍然不起作用,您可以使用布尔标志并仅读取参数一次.
像这样的东西:
if(!argumentsRead){
// read arguments
argumentsRead = true;
}
Run Code Online (Sandbox Code Playgroud)
我遇到过您想要删除片段中的参数的情况。例如,第一次输入片段时您可能拥有最新数据,但之后重新创建片段时您不需要该数据,而是想要刷新。您可以像这样清除包中的元素:
getArguments().remove("cartDetails");
Run Code Online (Sandbox Code Playgroud)
对于我写的案例,我在获取初始数据后将其放入片段的 onCreate 中。
| 归档时间: |
|
| 查看次数: |
8153 次 |
| 最近记录: |