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.
- you should not call alert.show() in oncreatedialog.
- 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
Post a Comment