片段已经补充说:DateDialog [英] Fragment already added: DateDialog

查看:145
本文介绍了片段已经补充说:DateDialog的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我必须让我的 EDITTEXT 点击。一旦它被点击,它就会显示的DatePicker对话框

 公共无效的onCreate(包savedInstanceState){
 super.onCreate(savedInstanceState);
 的setContentView(R.layout.information);
 日期=(EditText上)findViewById(R.id.date);
 对话框=新DateDialog();
 date.setOnClickListener(本);

        公共无效的onClick(查看为arg0){
        FragmentTransaction英尺= getFragmentManager()的BeginTransaction()。
        dialog.show(英尺的DatePicker);
        }

 公共静态类DateDialog扩展android.app.DialogFragment实现DatePickerDialog.OnDateSetListener {
        公共DateDialog(){}

         公共对话onCreateDialog(包savedInstanceState)
        {
            最后的日历C = Calendar.getInstance();
            INT年= c.get(Calendar.YEAR);
            INT月= c.get(Calendar.MONTH);
            INT天= c.get(Calendar.DAY_OF_MONTH);
            返回新DatePickerDialog(getActivity(),这,年,月,日);
        }

        公共无效onDateSet(DatePicker的观点,INT年,月整型,INT日)
        {
            串日期1 =日+ - +(月+ 1)+ - +年;
            date.setText(DATE1);
            DATE2 = date.getText()的toString()。
            返回 ;
         }
    }
 

如果我不小心双击 EDITTEXT ,应用程序崩溃,并显示片段已经添加如下错误。

  10月11日至26日:16:04.745 2348年至2348年/? E / AndroidRuntime:致命异常:主要
    工艺:com.example.project.myapplication,PID:2348
    java.lang.IllegalStateException:碎片已添加:DateDialog {d1ca446#0的DatePicker}
            在android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1219)
            在android.app.BackStackRecord.run(BackStackRecord.java:715)
            在android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1535)
            在android.app.FragmentManagerImpl $ 1.运行(FragmentManager.java:482)
            在android.os.Handler.handleCallback(Handler.java:739)
            在android.os.Handler.dispatchMessage(Handler.java:95)
            在android.os.Looper.loop(Looper.java:148)
            在android.app.ActivityThread.main(ActivityThread.java:5417)
            在java.lang.reflect.Method.invoke(本机方法)
            在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726)
            在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
 

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

解决方案
  

应用程序崩溃,并显示片段已经添加如下错误

由于打电话到显示方法。检查的对话框中显示或不显示的话则丢弃的点击事件,否则显示对话框:

 对话dialogFrg = dialog.getDialog();
如果(dialogFrg =空&安培;!&安培; dialogFrg.isShowing()){
   //无需调用dialog.show(FT的DatePicker);
} 其他 {
   //调用dialog.show(FT的DatePicker);
}
 

或使用也可以使用布尔标记就像一个开关,检查对话框中显示或不通过标志的true / false

I have make my editText clickable. Once it is clicked, it will display 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 ;
         }
    }

If I accidentally double click on the editText, the app crashed and shows Fragment already added error as below.

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)

Does anyone know how to fix this ? Thanks

解决方案

the app crashed and shows Fragment already added error as below

Because make a call to show method. check for is Dialog is showing or not if showing then discard the click event otherwise show Dialog:

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

or use can also use a boolean flag like a switch to check Dialog is showing or not by making flag true/false.

这篇关于片段已经补充说:DateDialog的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆