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

时间:2015-08-21 12:57:18

标签: java android android-fragments constructor

基于官方文档Fragment;

中的以下声明
  

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

似乎我们必须为任何Fragment或Dialog创建一个公共的无参数构造函数,因为框架会在需要时经常重新实例化。那么,"重新实例化"对我来说看起来很危险。现在这是我的问题。我有一个带有默认构造函数的对话框Dialog(Context)。这一切都很好,工作。在APK版本中,我收到此错误

  

错误:此类应提供默认构造函数(public   没有参数的构造函数)

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

好吧,我可以牺牲我变量的final关键字。但有一点让我担心。如果框架重新实例化我的对话框,那意味着我将获得一个新实例。我的旧实例会发生什么?我的旧变量是重新创建的还是只是与新实例交换?

1 个答案:

答案 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");