Fragment的工厂方法:设置类变量vs将Bundle作为参数放入Fragment中

时间:2016-12-26 13:32:26

标签: java android android-fragments factory-pattern

我一直在阅读使用工厂方法来获取自定义Fragment类的对象。假设我有一个自定义Fragment类,如下所示:

public class CustomFragment extends Fragment {

    ..........

    public static CustomFragment getInstance(String message) {
        CustomFragment fragment = new CustomFragment();
        Bundle bundle = new Bundle();
        bundle.putString(MESSAGE, message);
        fragment.setArguments(bundle);
        return fragment;
    }
   ..............
}

如果我有一个名为MESSAGE的类变量,并使用实例化对象上的setter设置其值,如下所示:

public class CustomFragment extends Fragment {

    ..........
    private String MESSAGE;

    private void setMessage(String msg) {
        this.MESSAGE = msg;
    }

    public static CustomFragment getInstance(String message) {
        CustomFragment fragment = new CustomFragment();
        fragment.setMessage(message);
        return fragment;
    }
   ..............
}

以上哪两个是首选的,为什么?

1 个答案:

答案 0 :(得分:2)

  

以上两个中的哪一个是首选

第一个。

  

为什么?

用户将旋转屏幕或以其他方式触发您的应用进行配置更改。默认情况下,您的前台活动及其片段将被销毁并重新创建。在您的第一个场景中,消息将成为已保存实例状态Bundle的一部分,并且不会丢失。在第二种情况下,消息将丢失,除非您在某处添加额外的代码以专门保留它。