当前位置: 首页 > 知识库问答 >
问题:

JAVA自定义对话框中的lang.IllegalStateException

仇炜
2023-03-14

我是Android新手,正在开发自定义警报对话框

我想打开另一个对话框,点击编辑按钮,代码如下

 if (v.getId() == R.id.edt_order) {                                  
        System.out.println(" edit buton click");                    
        System.out.println("Click my Order");
            System.out.println(" edit clickkkkkkkkkkkkkk");
         LayoutInflater li = LayoutInflater.from(getApplicationContext());
         View promptsView = li.inflate(R.layout.prompts, null);

         AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                 getApplicationContext());

         // set prompts.xml to alertdialog builder  
         alertDialogBuilder.setView(promptsView);    

         final EditText userInput = (EditText) promptsView
         .findViewById(R.id.editTextDialogUserInput); 

         // set dialog message
         alertDialogBuilder
         .setCancelable(false)
         .setPositiveButton("OK",
                 new DialogInterface.OnClickListener() {
             public void onClick(DialogInterface dialog,int id) {
                 // get user input and set it to result 
                 // edit text
                 //    result.setText(userInput.getText());

                 System.out.println("Click ok");    
                // insertData(userInput.getText().toString().trim());
                 Toast.makeText(getApplicationContext(), "Category added", 5000).show();
                 // loadSpinnerData();
             }
         })
         .setNegativeButton("Cancel",
                 new DialogInterface.OnClickListener() {
             public void onClick(DialogInterface dialog,int id) {
                 dialog.cancel();
             }
         }); 

         // create alert dialog   
          alertDialog = alertDialogBuilder.create();

         // show it
         alertDialog.show();                 
    }          

但我得到了一个异常,我的日志cat输出如下

01-23 14:46:57.438: D/AndroidRuntime(660): Shutting down VM
01-23 14:46:57.448: W/dalvikvm(660): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
01-23 14:46:57.558: D/dalvikvm(660): GC_FOR_MALLOC freed 3899 objects / 202144 bytes in 99ms
01-23 14:46:57.568: E/AndroidRuntime(660): FATAL EXCEPTION: main
01-23 14:46:57.568: E/AndroidRuntime(660): java.lang.IllegalStateException: Could not execute method of the activity
01-23 14:46:57.568: E/AndroidRuntime(660):  at android.view.View$1.onClick(View.java:2072)
01-23 14:46:57.568: E/AndroidRuntime(660):  at android.view.View.performClick(View.java:2408)
01-23 14:46:57.568: E/AndroidRuntime(660):  at android.view.View$PerformClick.run(View.java:8816)
01-23 14:46:57.568: E/AndroidRuntime(660):  at android.os.Handler.handleCallback(Handler.java:587)
01-23 14:46:57.568: E/AndroidRuntime(660):  at android.os.Handler.dispatchMessage(Handler.java:92)
01-23 14:46:57.568: E/AndroidRuntime(660):  at android.os.Looper.loop(Looper.java:123)
01-23 14:46:57.568: E/AndroidRuntime(660):  at android.app.ActivityThread.main(ActivityThread.java:4627)
01-23 14:46:57.568: E/AndroidRuntime(660):  at java.lang.reflect.Method.invokeNative(Native Method)
01-23 14:46:57.568: E/AndroidRuntime(660):  at java.lang.reflect.Method.invoke(Method.java:521)
01-23 14:46:57.568: E/AndroidRuntime(660):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-23 14:46:57.568: E/AndroidRuntime(660):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-23 14:46:57.568: E/AndroidRuntime(660):  at dalvik.system.NativeStart.main(Native Method)
01-23 14:46:57.568: E/AndroidRuntime(660): Caused by: java.lang.reflect.InvocationTargetException
01-23 14:46:57.568: E/AndroidRuntime(660):  at com.example.demoekot.MainScreen.clickHandler(MainScreen.java:524)
01-23 14:46:57.568: E/AndroidRuntime(660):  at java.lang.reflect.Method.invokeNative(Native Method)
01-23 14:46:57.568: E/AndroidRuntime(660):  at java.lang.reflect.Method.invoke(Method.java:521)
01-23 14:46:57.568: E/AndroidRuntime(660):  at android.view.View$1.onClick(View.java:2067)
01-23 14:46:57.568: E/AndroidRuntime(660):  ... 11 more
01-23 14:46:57.568: E/AndroidRuntime(660): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
01-23 14:46:57.568: E/AndroidRuntime(660):  at android.view.ViewRoot.setView(ViewRoot.java:509)
01-23 14:46:57.568: E/AndroidRuntime(660):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
01-23 14:46:57.568: E/AndroidRuntime(660):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
01-23 14:46:57.568: E/AndroidRuntime(660):  at android.app.Dialog.show(Dialog.java:241)
01-23 14:46:57.568: E/AndroidRuntime(660):  ... 15 more

就连我的红色十字按钮也可以正常工作,我已经多次使用相同的代码用TextView显示AlertDialog,但我不知道代码出了什么问题。非常感谢您的帮助。提前谢谢。

现在我得到了我想要的,但是编辑和保存都有重叠。我想隐藏编辑(蓝色按钮)并使保存按钮清晰可见。

共有3个答案

钱经赋
2023-03-14

进行以下更改

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
唐元青
2023-03-14
匿名用户

代替

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getApplicationContext());

具有

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(YourActivityName.this);

对话框需要一个上下文引用,其窗口标记不是null,例如活动引用...

束研
2023-03-14

如果阅读getApplicationContext()上的文档,您会发现只有在需要一个生命周期与当前上下文分离的上下文时,才应该使用此选项。这不适用于您的示例和使用这个对象作为className类型的对象。我想这里你可以用

  AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);

  AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(ClassNAme.this);

两者都应该有效。

 类似资料:
  • 我有一个带有的自定义对话框。在我的上,我有一个按钮,当我按下它时,对话框就会显示出来,我可以从中选择日期。我希望选定的日期显示在我的中的上。我的代码如下: 这是我的主上包含的对话框的代码: 我从中获取日、月和年,并使用 在我的片段中,我使用下面的代码调用我的对话框: 当我运行我的应用程序时,我在以下行中得到一个nullPointerException: 我做错了什么?提前致谢

  • 本文向大家介绍Android 自定义对话框 showSetPwdDialog,包括了Android 自定义对话框 showSetPwdDialog的使用技巧和注意事项,需要的朋友参考一下 样式如下所示: 布局: layout   dialog_set_pwd.xml 状态选择器: drawable   btn_blue_selector.xml   btn_white_selector.xml 引

  • 问题内容: 我在JFrame上有一个按钮,当单击该按钮时,我希望对话框弹出并带有多个文本区域供用户输入。我一直在四处寻找解决方法,但是我一直感到困惑。有人可以帮忙吗? 问题答案: 如果您不需要太多自定义行为,则JOptionPane可以节省大量时间。它负责OK / Cancel选项的放置和本地化,并且是一种无需定义自己的类即可显示自定义对话框的快捷方法。大多数情况下,JOptionPane中的“

  • 我们可以覆盖页面离开确认对话框与自定义设计的对话框,如jquery UI对话框? 我试图将其实现为: var warning=true; var v_leavemsg=“确实要离开页面吗?”;Window.OnBeforeUnload=ConfirmExit; 函数confirmExit(){ if(warning){ //custom dialog函数调用 f_customdialog(v_le

  • 是否可能在Office加载项中有自定义对话框。我搜索了一下,但找不到任何相关的东西。 如果这是不可能的,有没有一个工作周围的人可以建议。 它是一个带有任务窗格的Word加载项。我需要在点击窗格中的一个按钮时打开一个对话框,这样一些选择就可以在框中完成,并传回文档。 谢谢你。

  • 本文向大家介绍Android自定义等待对话框,包括了Android自定义等待对话框的使用技巧和注意事项,需要的朋友参考一下 最近,看了好多的APP的等待对话框,发现自己的太lower,于是就研究了一番,最后经过苦心努力,实现一个。 自定义一个LoadingIndicatorView(extends View )类 编写values/attrs.xml,在其中编写styleable和item等标签元