基于官方文档Fragment;
中的以下声明Fragment的所有子类必须包含公共无参数 构造函数。该框架通常会重新实例化一个片段类 在需要时,特别是在状态恢复期间,并且需要能够 找到这个构造函数来实例化它。如果没有参数 构造函数不可用,某些运行时异常会发生 状态恢复期间的案例。
似乎我们必须为任何Fragment或Dialog创建一个公共的无参数构造函数,因为框架会在需要时经常重新实例化。那么,"重新实例化"对我来说看起来很危险。现在这是我的问题。我有一个带有默认构造函数的对话框Dialog(Context)
。这一切都很好,工作。在APK版本中,我收到此错误
错误:此类应提供默认构造函数(public 没有参数的构造函数)
现在,我在此对话框中有一些最终变量,我在默认构造函数调用Dialog(Context)
上初始化。但是现在我需要为框架创建一个空构造函数。此时,我无法初始化我的最终变量。
好吧,我可以牺牲我变量的final关键字。但有一点让我担心。如果框架重新实例化我的对话框,那意味着我将获得一个新实例。我的旧实例会发生什么?我的旧变量是重新创建的还是只是与新实例交换?
答案 0 :(得分:0)
public static YourDialogFragment newInstance(SearchInfo searchInfo) {
YourDialogFragment fragment = new YourDialogFragment();
Bundle bundle = new Bundle();
bundle.putParcelable("key", yourdata);
fragment.setArguments(bundle);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = getArguments();
if (bundle != null) {
searchInfo = bundle.getParcelable(key);
}
}
您可以调用对话框片段
YourDialogFragmentsearchDialogFragment=YourDialogFragment.newInstance(searchInfo);
searchDialogFragment.show(activity.getSupportFragmentManager, "your tag");