首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DatePickerDialog错误:片段已添加

DatePickerDialog错误:片段已添加
EN

Stack Overflow用户
提问于 2016-11-07 16:35:53
回答 1查看 802关注 0票数 2

我的datePickerDialog有问题。对选取器使用EditText,当我尝试单击/双击选取器时,它给出错误。如何防止此错误

代码语言:javascript
复制
 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编写的代码

代码语言:javascript
复制
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);
    }
 }
EN

回答 1

Stack Overflow用户

发布于 2016-11-07 17:16:24

在onCreate之前声明DatePickerDialog

代码语言:javascript
复制
 DatePickerDialog datePickerDialog1;
 DatePickerDialog datePickerDialog2;

然后

代码语言:javascript
复制
    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);
                        }
                }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40460859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档