Java 对话框中的Android默认构造函数

Java 对话框中的Android默认构造函数,java,android,android-fragments,constructor,Java,Android,Android Fragments,Constructor,基于官方文件中的以下声明 Fragment的所有子类必须包含一个公共无参数 构造器。框架通常会重新实例化片段类 需要时,特别是在状态恢复期间,并且需要能够 找到这个构造函数来实例化它。如果答案是否定的 构造函数不可用,在某些情况下会发生运行时异常 状态恢复期间的案例 似乎我们必须为任何片段或对话框创建一个公共的无参数构造函数,因为框架通常会在需要时重新实例化。“重新实例化”这个词对我来说很危险。现在是我的问题。我有一个对话框,默认构造函数为Dialog(Context)。这一切都很好,很有效。在

基于官方文件中的以下声明

Fragment的所有子类必须包含一个公共无参数 构造器。框架通常会重新实例化片段类 需要时,特别是在状态恢复期间,并且需要能够 找到这个构造函数来实例化它。如果答案是否定的 构造函数不可用,在某些情况下会发生运行时异常 状态恢复期间的案例

似乎我们必须为任何片段或对话框创建一个公共的无参数构造函数,因为框架通常会在需要时重新实例化。“重新实例化”这个词对我来说很危险。现在是我的问题。我有一个对话框,默认构造函数为
Dialog(Context)
。这一切都很好,很有效。在APK版本中,我得到了这个错误

错误:此类应提供默认构造函数(公共 构造函数(不带参数)

现在,我在这个对话框中有一些最后的变量,我在默认构造函数调用
对话框(上下文)
中初始化它们。但是现在我需要为框架创建一个空构造函数。此时,我无法初始化最终变量

好吧,我可以牺牲我的变量的最后一个关键字。但有一点让我担心。如果框架重新实例化我的对话框,这意味着我将获得一个新实例。我以前的例子怎么了?我的旧变量是重新创建的还是简单地与新实例交换的

 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");
你可以调用你的对话片段

    YourDialogFragmentsearchDialogFragment=YourDialogFragment.newInstance(searchInfo);
searchDialogFragment.show(activity.getSupportFragmentManager, "your tag");

只需在无参数构造函数中初始化您的最终变量并调用它——或者更好,如果可能的话,在声明时这样做。如果您需要维护状态,请使用
onSaveInstanceState()
onRestoreInstanceState()
@323go Yes,但是我以前的最终变量会发生什么情况呢?只需在无参数构造函数中初始化最终变量并调用它——或者更好,如果可能,在声明时这样做。如果您需要维护状态,请使用
onSaveInstanceState()
onRestoreInstanceState()
@323go Yes,但我以前的最终变量会发生什么情况?但并非所有最终变量都是可打包的。这解决不了问题(@OmerHalit请添加参数或类好吗?但我的最终变量并非都是可打包的。这无法解决问题。:(@OmerHalit请添加参数或类好吗?