为什么我必须在Android

时间:2016-10-31 12:26:42

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

我们通常在将参数传递给片段时使用以下样式

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?”。他们说“当片段重新实例化时,系统更容易恢复其值” 但我测试的是,如果片段从堆栈中弹出,变量仍然存在。

1 个答案:

答案 0 :(得分:2)

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

参数包仍然存在于重新创建的片段中。