【问题标题】:Why I have to pass Bundle to Fragment in Android为什么我必须在 Android 中将 Bundle 传递给 Fragment
【发布时间】:2017-03-13 12:52:31
【问题描述】:

我们通常在给fragment传递参数的时候使用下面的样式

public static MyFragment newInstance() {
    MyFragment fragment = new MyFragment();
    String myVariable = "My variable string";
    Bundle bundle = new Bundle();
    bundle.putString("myVariable", myVariable);
    fragment.setArguments(bundle);
    return fragment;
}

当我们使用getter setter方法时会发生什么:

private String myVariable;
public String getMyVariable() {
    return myVariable;
}
public void setMyVariable(String myVariable) {
    this.myVariable = myVariable;
}
public static MyFragment newInstance() {
    MyFragment fragment = new MyFragment();
    String passVariable = "My variable string";
    fragment.setMyVariable(passVariable);
    return fragment;
}


public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    String passVariable = getMyVariable();

}

当我用第二种方式测试时,没有出现问题。那么为什么我们要使用第一种方式呢?

我还看到了帖子“Why use bundle to pass data to fragment?”。他们说“重新实例化片段时系统更容易恢复其值” 但是我测试了如果片段从堆栈中弹出,变量仍然存在。

【问题讨论】:

  • 看看this的问题,

标签: android android-fragments parameter-passing bundle getter-setter


【解决方案1】:

如果框架需要重新创建您的片段,您使用第二个 setter 方法设置的数据将丢失。

参数包持续到重新创建的片段。

【讨论】:

  • 变量总是丢失还是有时会丢失?我测试了片段从堆栈中弹出的情况,变量仍然存在。
  • 重新创建片段时会丢失。一种常见的娱乐来源是设备方向变化。
  • 哦,谢谢。我错过了这个案子
猜你喜欢
  • 1970-01-01
  • 2012-10-22
  • 1970-01-01
  • 2016-06-02
  • 2017-08-01
  • 2014-02-16
  • 1970-01-01
  • 1970-01-01
  • 2010-11-06
相关资源
最近更新 更多