如何清除Fragment中的参数?

jul*_*jul 8 android fragment

我有一个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)

那我怎么能清除这些论点呢?

Bal*_*ear 18

调用片段this.getArguments().clear();中的onDestroyView()方法.

  • 或特定的“删除(键)” (3认同)

And*_*Res 10

确保您正在阅读getArguments()onCreate()片段的方法.一旦片段被创建,当你回去时你不会通过低谷onCreate(),所以你不应该再次阅读这些论点.

如果这仍然不起作用,您可以使用布尔标志并仅读取参数一次.

像这样的东西:

if(!argumentsRead){

    // read arguments

    argumentsRead = true;
}
Run Code Online (Sandbox Code Playgroud)


j2e*_*nue 8

我遇到过您想要删除片段中的参数的情况。例如,第一次输入片段时您可能拥有最新数据,但之后重新创建片段时您不需要该数据,而是想要刷新。您可以像这样清除包中的元素:

getArguments().remove("cartDetails");
Run Code Online (Sandbox Code Playgroud)

对于我写的案例,我在获取初始数据后将其放入片段的 onCreate 中。