Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android应用程序中的对话框。android.view.WindowsManager$BadTokenException_Java_Android - Fatal编程技术网

Java android应用程序中的对话框。android.view.WindowsManager$BadTokenException

Java android应用程序中的对话框。android.view.WindowsManager$BadTokenException,java,android,Java,Android,我试图创建一个对话框,但当我试图运行代码时它崩溃了。我想在我的片段中的listview中选择一个项目时运行它,现在我只想尝试显示对话框而不传递任何内容 以下是我的java代码: myInfoList.setAdapter(new CustomAdapter(details , getActivity().getApplicationContext())); myInfoList.setOnItemClickListener(new OnItemClickList

我试图创建一个对话框,但当我试图运行代码时它崩溃了。我想在我的片段中的listview中选择一个项目时运行它,现在我只想尝试显示对话框而不传递任何内容

以下是我的java代码:

        myInfoList.setAdapter(new CustomAdapter(details , getActivity().getApplicationContext()));

        myInfoList.setOnItemClickListener(new OnItemClickListener() {
               public void onItemClick(AdapterView<?> a, View v, int position, long id) {
                   //System.out.println("Name: "+details.get(position).getSub();
                   //String s = details.get(position).getDescription();
                   final Dialog dialog = new Dialog(getActivity().getApplicationContext());
                   dialog.setContentView(R.layout.purchase);
                   dialog.setTitle("Title");

                   Button dialogButton = (Button) dialog.findViewById(R.id.dialogButtonOK);
                    // if button is clicked, close the custom dialog
                    dialogButton.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            dialog.dismiss();
                        }
                    });

                    dialog.show();
               }
       });

更改以下行:

final Dialog dialog = new Dialog(getActivity().getApplicationContext());
致:

对话框不能与应用程序上下文一起实例化,因为这两个对话框具有不同的生命周期:对话框的生命周期绑定到宿主
活动的生命周期。在这里进行简单的搜索可能也会发现这一点

为了解释不同的
背景
口味以及何时(不)使用哪种口味,我建议通读本主题。它还包含一个方便的表格供参考。

只需更改此项即可

final Dialog dialog = new Dialog(getActivity());
而不是这个

final Dialog dialog = new Dialog(getActivity().getApplicationContext());
&当你传递上下文时,请记住

  • 在片段中使用
    getActivity()
  • 在Activity
    YourActivity中。此

  • 原因是无法通过非活动的上下文显示应用程序窗口/对话框。尝试传递有效的活动引用。

    不太可能。如果
    getActivity()
    返回
    null
    ,则对其调用
    .getApplicationContext()
    的任何尝试都将导致NullPointerException。你的strack痕迹不是这么说的。。。
    final Dialog dialog = new Dialog(getActivity());
    
    final Dialog dialog = new Dialog(getActivity().getApplicationContext());