android - DatePickerDialog 错误 : Fragment already added

标签 android datepickerdialog

我的 datePickerDialog 有问题。使用 EditText 作为选择器,当我尝试单击/双击选择器时,出现错误。如何防止这个错误

 java.lang.IllegalStateException: Fragment already added: DatePickerDialog {4a9aadf4 #0 datePickerDialog1}
  at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1361) 
  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:734)
  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1677)
  at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:536)
  at android.os.Handler.handleCallback(Handler.java:733)
  at android.os.Handler.dispatchMessage(Handler.java:95)
  at android.os.Looper.loop(Looper.java:136)
  at android.app.ActivityThread.main(ActivityThread.java:5045)
  at java.lang.reflect.Method.invokeNative(Native Method)
  at java.lang.reflect.Method.invoke(Method.java:515)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
  at dalvik.system.NativeStart.main(Native Method)

我已经尝试在代码中添加 datePickerDialog1.isAdded() 但它仍然不起作用

下面是我的 datePickerDialog 代码

date1 = (EditText) findViewById(R.id.date1);
date2 = (EditText) findViewById(R.id.date2);

datePickerDialog1 = com.fourmob.datetimepicker.date.DatePickerDialog.newInstance(this, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
datePickerDialog2 = com.fourmob.datetimepicker.date.DatePickerDialog.newInstance(this, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));

date1.setOnClickListener(new View.OnClickListener() {

  @Override
  public void onClick(View v) {
       datePickerDialog1.setYearRange(1910, 2037);
       datePickerDialog1.show(getSupportFragmentManager(), DATE_PICKER_1);
       datePickerDialog1.setOnDateSetListener(new DatePickerDialog.OnDateSetListener() {

         @Override
         public void onDateSet(DatePickerDialog datePickerDialog, int year, int month, int day) {
                date1.setText(" " + month + " " + day + " " + year);
                 }
              });
            }
         });

date2.setOnClickListener(new View.OnClickListener() {

  @Override
  public void onClick(View v) {
      datePickerDialog2.setYearRange(1910, 2037);
      datePickerDialog2.show(getSupportFragmentManager(), DATE_PICKER_2);
      datePickerDialog2.setOnDateSetListener(new DatePickerDialog.OnDateSetListener() {

         @Override
         public void onDateSet(DatePickerDialog datePickerDialog, int year, int month, int day) {
                date2.setText(" " + month + " " + day + " " + year);
                  }
               });
             }
          });         

if(savedInstanceState != null) {
  DatePickerDialog datePickerDialog1= (DatePickerDialog) getSupportFragmentManager().findFragmentByTag(DATE_PICKER_1);
    if(datePickerDialog1!= null || datePickerDialog1.isAdded()) {
       datePickerDialog1.setOnDateSetListener(this);
    }

  DatePickerDialog datePickerDialog2 = (DatePickerDialog) getSupportFragmentManager().findFragmentByTag(DATE_PICKER_2);
    if(datePickerDialog2 != null || datePickerDialog2.isAdded()) {
        datePickerDialog2 .setOnDateSetListener(this);
    }
 }

最佳答案

在onCreate 之前声明DatePickerDialog

 DatePickerDialog datePickerDialog1;
 DatePickerDialog datePickerDialog2;

然后

    date1 = (EditText) findViewById(R.id.date1);
    date2 = (EditText) findViewById(R.id.date2);

    datePickerDialog1 = com.fourmob.datetimepicker.date.DatePickerDialog.newInstance(this, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
    datePickerDialog2 = com.fourmob.datetimepicker.date.DatePickerDialog.newInstance(this, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));

    date1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
                datePickerDialog1.setYearRange(1910, 2037);
                datePickerDialog1.show(getSupportFragmentManager(), DATE_PICKER_1);
                datePickerDialog1.setOnDateSetListener(new DatePickerDialog.OnDateSetListener() {

                    @Override
                    public void onDateSet(DatePickerDialog datePickerDialog, int year, int month, int day) {
                        date1.setText(" " + month + " " + day + " " + year);
                    }
                });
            }
        });

     date2.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
                datePickerDialog2.setYearRange(1910, 2037);
                datePickerDialog2.show(getSupportFragmentManager(), DATE_PICKER_2);
                datePickerDialog2.setOnDateSetListener(new DatePickerDialog.OnDateSetListener() {

                    @Override
                    public void onDateSet(DatePickerDialog datePickerDialog, int year, int month, int day) {
                        date2.setText(" " + month + " " + day + " " + year);
                    }
                });
            }
        });


          if(savedInstanceState != null) {

                        if(datePickerDialog1!= null || datePickerDialog1.isAdded()) {
                            datePickerDialog1.setOnDateSetListener(this);
                        }


                        if(datePickerDialog2 != null || datePickerDialog2 .isAdded()) {
                            datePickerDialog2 .setOnDateSetListener(this);
                        }
                }

关于android - DatePickerDialog 错误 : Fragment already added,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40460859/

相关文章:

android - Activity 内容转换不起作用

java - 如何解决大小为0的android.database.CursorIndexOutOfBoundsException : Index 0 requested,

android - 如何将 DatePicker 对话框的背景颜色从默认的白色更改?

android - DatePickerDialog 显示有两个边框

java - 追加到 Kotlin 数据类 ArrayList

Android UI 更新线程 - 保存和恢复它

android - 自定义微调器的间距

java - 如何删除DatePickerDialog背景

android - 从 Android Material DatePickerDialog 中删除纯色背景