【问题标题】:Is it save to overrwrite the savedInstanceState bundle after passing it up?传递 saveInstanceState 包后覆盖它是否安全?
【发布时间】:2015-04-18 13:15:58
【问题描述】:

我有以下内容(以避免检查片段是新创建还是重新创建)

@Override public void onActivityCreated(Bundle args) {
  super.onActivityCreated(args);
  if (this.getArguments() != null) args = this.getArguments();
 // rest of fragment loading goes here
}

【问题讨论】:

  • 我认为您正在尝试在片段中创建一个本地字段并通过调用 getArguments();您可以使用静态工厂方法尝试它,该方法将参数从类外部放入片段。就像来自 ViewPagerFragment 适配器的 getFragment。
  • “是否保存”关于什么?除了您的本地参考args 之外,您不会覆盖任何内容。您不会更改通过super 调用传递的Bundle
  • Javapass-by-value,所以是的,这很安全,您只需将本地变量 args 更改为指向另一个对象

标签: android android-fragments android-lifecycle


【解决方案1】:

不确定您要做什么从未见过 budle 值被覆盖。

如果您希望片段内的某些值可用,请将这些值传递给活动并在片段内部调用 getActivity().getIntent().getExtra(

如果要在片段被销毁时保存一些片段数据,请查看下面的代码 onCreate 方法的内部片段检查 savedInstanceState 是否为空

 @Override
public void onCreate(Bundle savedInstanceState) {

    if (savedInstanceState != null) {
        //fragment recreated
    }
  }

如下保存数据

     @Override
    public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

   if (jsonObject != null) {
        outState.putString(Constants.JSON, jsonObject.toString());
   }

}

【讨论】:

  • 这与问题有什么关系?
  • 如果 savedinstance 不是 null 片段重新创建就这么简单
  • 我以为他在问如何在重新创建片段时重新加载数据,这就是上面代码的原因
猜你喜欢
  • 1970-01-01
  • 2023-02-14
  • 1970-01-01
  • 2011-01-23
  • 1970-01-01
  • 2011-02-09
  • 2021-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多