【问题标题】:Fragment already added: DateDialog已添加片段:DateDialog
【发布时间】:2015-11-26 10:27:59
【问题描述】:

我已将我的editText 设为可点击。单击后,它将显示DatePicker dialog

 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.information);
 date = (EditText) findViewById(R.id.date);
 dialog=new DateDialog();
 date.setOnClickListener(this);

        public void onClick(View arg0) {
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        dialog.show(ft, "DatePicker");
        }

 public static class DateDialog extends android.app.DialogFragment implements DatePickerDialog.OnDateSetListener {
        public DateDialog() {}

         public Dialog onCreateDialog(Bundle savedInstanceState)
        {
            final Calendar c=Calendar.getInstance();
            int year=c.get(Calendar.YEAR);
            int month=c.get(Calendar.MONTH);
            int day=c.get(Calendar.DAY_OF_MONTH);
            return new DatePickerDialog(getActivity(),this,year,month,day);
        }

        public void onDateSet(DatePicker view,int year, int month, int day)
        {
            String date1=day+"-"+(month+1)+"-"+year;
            date.setText(date1);
            date2= date.getText().toString();
            return ;
         }
    }

如果我不小心双击editText,应用程序崩溃并显示Fragment already added 错误如下。

11-26 10:16:04.745    2348-2348/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.example.project.myapplication, PID: 2348
    java.lang.IllegalStateException: Fragment already added: DateDialog{d1ca446 #0 DatePicker}
            at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1219)
            at android.app.BackStackRecord.run(BackStackRecord.java:715)
            at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1535)
            at android.app.FragmentManagerImpl$1.run(FragmentManager.java:482)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:148)
            at android.app.ActivityThread.main(ActivityThread.java:5417)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

有谁知道如何解决这个问题?谢谢

【问题讨论】:

    标签: android android-fragments datepicker


    【解决方案1】:

    应用程序崩溃并显示 Fragment 已添加错误如下

    因为调用了show 方法。检查是否显示对话框,如果显示则丢弃点击事件,否则显示对话框:

    Dialog dialogFrg=dialog.getDialog();
    if(dialogFrg!=null && dialogFrg.isShowing()) {
       // no need to call dialog.show(ft, "DatePicker");
    } else {
       // call dialog.show(ft, "DatePicker");
    }
    

    或者也可以使用boolean 标志,例如通过设置标志true/false 来检查对话框是否显示。

    【讨论】:

    • @Hoo:显示崩溃日志。你用boolean flag试过了吗?
    【解决方案2】:

    你可以使用:

      if(!dialogFragment.isAdded())
        dialogFragment.show(getSupportFragmentManager(), "datePicker");
    

    【讨论】:

      【解决方案3】:

      也许对话框在第二次点击时没有被关闭。

      尝试在 dateDialog 类中重写 onDismiss 方法:

      @Override
      public void onDismiss(DialogInterface dialog) {
          Dialog dialog1 = getDialog();
          dialog1.dismiss();
      }
      

      【讨论】:

        【解决方案4】:

        你的 clickListner

        public void onClick(View arg0) {
            if(dialog==null) 
                dialog=new DateDialog();
                FragmentTransaction ft = getFragmentManager().beginTransaction();
                dialog.show(ft, "DatePicker");
            }
        }
        

        和 onDismiss

        @Override
        public void onDismiss(DialogInterface dialog) {
            dialog = null;
        }
        

        【讨论】:

        • 你这是什么意思?
        • 我的意思是 onDismiss 永远不会被调用
        • 在此处粘贴您的完整课程
        【解决方案5】:

        您可以检查是否添加了第一个对话框。并使用 showNow() 方法,它会立即附加片段。

        if ((dialog == null || !dialog?.isShowing!!) && !isAdded){
                showNow(fragmentManager, logTag) }
        

        【讨论】:

          猜你喜欢
          • 2011-09-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-24
          相关资源
          最近更新 更多