android - AlerDialog is not created - java.lang.IllegalArgumentException: Activity#onCreateDialog did not create a dialog for id X -


i want create normal alertdialog. used example provided android dev docs. changed dialog_paused_id dialog_deletedb. if execute code , press button in return should create dialog, following error log:

04-29 01:01:20.973: warn/dalvikvm(1168): threadid=3: thread exiting uncaught exception (group=0x4001b188) 04-29 01:01:20.973: error/androidruntime(1168): uncaught handler: thread main exiting due uncaught exception 04-29 01:01:20.993: error/androidruntime(1168): java.lang.illegalargumentexception: activity#oncreatedialog did not create dialog id 4 04-29 01:01:20.993: error/androidruntime(1168):     @ android.app.activity.createdialog(activity.java:871) 04-29 01:01:20.993: error/androidruntime(1168):     @ android.app.activity.showdialog(activity.java:2483) 04-29 01:01:20.993: error/androidruntime(1168):     @ mjb.project.avv.favs.onmenuitemselected(favs.java:111) 04-29 01:01:20.993: error/androidruntime(1168):     @ com.android.internal.policy.impl.phonewindow.onmenuitemselected(phonewindow.java:730) 04-29 01:01:20.993: error/androidruntime(1168):     @ com.android.internal.view.menu.menuitemimpl.invoke(menuitemimpl.java:139) 04-29 01:01:20.993: error/androidruntime(1168):     @ com.android.internal.view.menu.menubuilder.performitemaction(menubuilder.java:855) 04-29 01:01:20.993: error/androidruntime(1168):     @ com.android.internal.view.menu.iconmenuview.invokeitem(iconmenuview.java:525) 04-29 01:01:20.993: error/androidruntime(1168):     @ com.android.internal.view.menu.iconmenuitemview.performclick(iconmenuitemview.java:122) 04-29 01:01:20.993: error/androidruntime(1168):     @ android.view.view.ontouchevent(view.java:4179) 04-29 01:01:20.993: error/androidruntime(1168):     @ android.widget.textview.ontouchevent(textview.java:6540) 04-29 01:01:20.993: error/androidruntime(1168):     @ android.view.view.dispatchtouchevent(view.java:3709) 04-29 01:01:20.993: error/androidruntime(1168):     @ android.view.viewgroup.dispatchtouchevent(viewgroup.java:884) 04-29 01:01:20.993: error/androidruntime(1168):     @ android.view.viewgroup.dispatchtouchevent(viewgroup.java:884) 04-29 01:01:20.993: error/androidruntime(1168):     @ com.android.internal.policy.impl.phonewindow$decorview.dispatchtouchevent(phonewindow.java:1643) 04-29 01:01:20.993: error/androidruntime(1168):     @ android.view.viewroot.handlemessage(viewroot.java:1691) 04-29 01:01:20.993: error/androidruntime(1168):     @ android.os.handler.dispatchmessage(handler.java:99) 04-29 01:01:20.993: error/androidruntime(1168):     @ android.os.looper.loop(looper.java:123) 04-29 01:01:20.993: error/androidruntime(1168):     @ android.app.activitythread.main(activitythread.java:4363) 04-29 01:01:20.993: error/androidruntime(1168):     @ java.lang.reflect.method.invokenative(native method) 04-29 01:01:20.993: error/androidruntime(1168):     @ java.lang.reflect.method.invoke(method.java:521) 04-29 01:01:20.993: error/androidruntime(1168):     @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:860) 04-29 01:01:20.993: error/androidruntime(1168):     @ com.android.internal.os.zygoteinit.main(zygoteinit.java:618) 04-29 01:01:20.993: error/androidruntime(1168):     @ dalvik.system.nativestart.main(native method) 

so here "relevant" code parts:

define id:

private static final int delete_db_id   = 3; private dialog dialog; static final int dialog_deletedb = 4; 

oncreatedialog(...):

protected dialog oncreatedialog(int id) {         switch(id) {         case dialog_deletedb:             // work define pause dialog             alertdialog.builder builder = new alertdialog.builder(this);             builder.setmessage("are sure want exit?")             .setcancelable(false)             .setpositivebutton("yes", new dialoginterface.onclicklistener() {                 public void onclick(dialoginterface dialog, int id) {                      favs.this.finish();                 }             })             .setnegativebutton("no", new dialoginterface.onclicklistener() {                 public void onclick(dialoginterface dialog, int id) {                      dialog.cancel();                 }             });             alertdialog alert = builder.create();             alert.show();             break;         default:             dialog = null;         }   return dialog;     } 

here try "create" dialog:

@override     public boolean onmenuitemselected(int featureid, menuitem item) {         switch(item.getitemid()) {         case add_id:             createnote();             return true;         case delete_db_id:             showdialog(dialog_deletedb);             return true;         }               return super.onmenuitemselected(featureid, item);     } 

as said, copied code , changed name. unfortunately, don't understand error log message.. :/ somehow think don't return created dialog, cannot see "where" reference or where/what have return...

thanks in advance help.

  1. you should not call alert.show() in oncreatedialog.
  2. your oncreatedialog returns dialog variable null, don't initialize it.

please take @ samples\apidemos\src\com\example\android\apis\app\alertdialogsamples.java, done correctly there. may read http://developer.android.com/guide/topics/ui/dialogs.html on correct oncreatedialog usage. here's fixed version of oncreatedialog:

protected dialog oncreatedialog(int id) {         switch(id) {         case dialog_deletedb:             // work define pause dialog             alertdialog.builder builder = new alertdialog.builder(this);             builder.setmessage("are sure want exit?")             .setcancelable(false)             .setpositivebutton("yes", new dialoginterface.onclicklistener() {                 public void onclick(dialoginterface dialog, int id) {                      favs.this.finish();                 }             })             .setnegativebutton("no", new dialoginterface.onclicklistener() {                 public void onclick(dialoginterface dialog, int id) {                      dialog.cancel();                 }             });             alertdialog alert = builder.create();             return alert;         }  return null;     } 

another approach display dialog directly:

public boolean onmenuitemselected(int featureid, menuitem item) {         switch(item.getitemid()) {         case delete_db_id:           alertdialog.builder builder = new alertdialog.builder(this);             builder.setmessage("are sure want exit?")             .setcancelable(false)             .setpositivebutton("yes", new dialoginterface.onclicklistener() {                 public void onclick(dialoginterface dialog, int id) {                      favs.this.finish();                 }             })             .setnegativebutton("no", new dialoginterface.onclicklistener() {                 public void onclick(dialoginterface dialog, int id) {                      dialog.cancel();                 }             });             alertdialog alert = builder.create();             alert.show();             return true;         }               return super.onmenuitemselected(featureid, item);     } 

Comments

Popular posts from this blog

javascript - Enclosure Memory Copies -

php - Replacing tags in braces, even nested tags, with regex -