尝试显示对话框

时间:2015-12-09 10:01:02

标签: java android crash dialog

只是一个简单的事情,应用程序应该在单击按钮时显示对话框。但是当它被点击时,它就崩溃了。而且我不明白试图说出的logCat错误是什么。

 addImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                final Dialog dialog = new Dialog(getApplication());
                dialog.setContentView(R.layout.custom_dialog_box);
                dialog.setTitle("Alert Dialog View");
                Button btnExit = (Button) dialog.findViewById(R.id.btnExit);
                btnExit.setOnClickListener(new View.OnClickListener() {
                    @Override public void onClick(View v) {
                        dialog.dismiss();
                    }
                });
                dialog.findViewById(R.id.btnChoosePath)
                        .setOnClickListener(new View.OnClickListener() {
                            @Override public void onClick(View v) {
                               // activeGallery();
                            }
                        });
                dialog.findViewById(R.id.btnTakePhoto)
                        .setOnClickListener(new View.OnClickListener() {
                            @Override public void onClick(View v) {
                                //activeTakePhoto();
                            }
                        });

                // show dialog on screen
                dialog.show();
            }

            });

XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:background="@color/light_gray"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:layout_height="fill_parent">

    <Button
        android:onClick="btnChoosePathClicked"
        android:id="@+id/btnChoosePath"
        android:background="@color/honey_dew2"
        android:textColor="@color/black"
        android:layout_centerHorizontal="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"
        android:width="200dp"
        android:text="From Gallery"/>

    <Button
        android:onClick="btnTakePhotoClicked"
        android:id="@+id/btnTakePhoto"
        android:background="@color/honey_dew2"
        android:textColor="@color/black"
        android:layout_centerHorizontal="true"
        android:layout_below="@id/btnChoosePath"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"
        android:width="200dp"
        android:text="Take Photo"/>

    <Button
        android:onClick="btnExitClicked"
        android:id="@+id/btnExit"
        android:background="@color/honey_dew2"
        android:textColor="@color/black"
        android:layout_centerHorizontal="true"
        android:layout_below="@id/btnTakePhoto"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:width="200dp"
        android:text="Exit"/>
</RelativeLayout>

LogCat错误

12-09 17:57:34.344  18804-18804/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
            at android.view.ViewRootImpl.setView(ViewRootImpl.java:698)
            at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:248)
            at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
            at android.app.Dialog.show(Dialog.java:281)
            at com.example.project.myapplication.GUI.AddMoreClaims$1.onClick(AddMoreClaims.java:68)
            at android.view.View.performClick(View.java:4230)
            at android.view.View$PerformClick.run(View.java:17660)
            at android.os.Handler.handleCallback(Handler.java:800)
            at android.os.Handler.dispatchMessage(Handler.java:100)

其中(AddMoreClaims.java:68)引用dialog.show();。这里有什么问题?

5 个答案:

答案 0 :(得分:2)

按照以下代码制作dialog声明:

活动:

final Dialog dialog = new Dialog(Your_Activity_Name.this);

片段:

final Dialog dialog = new Dialog(getActivity());

答案 1 :(得分:1)

  

无法添加窗口 - 令牌null不适用于应用程序

getApplication()重新调整null

使用v.getContext()ActivityName.this创建Dialog对象:

final Dialog dialog = new Dialog(v.getContext());
OR
final Dialog dialog = new Dialog(ActivityName.this);

答案 2 :(得分:1)

您无法使用应用程序上下文创建Dialog,您应该使用活动上下文。

new Dialog(MyActivity.this); //if you use Activity
new Dialog(getActivity()); //if you use Fragment 

答案 3 :(得分:1)

您应该在活动中显示对话框,而不是在应用程序中。 在当前的开放活动中打开对话框,它应该适合您。

答案 4 :(得分:1)

正如其他人在上面提到的那样,你的语境getApplication()是错误的。

这是因为您需要让当前Activity的{​​{1}}在其上显示任何内容(弹出窗口,视图,对话框)。

虽然您可以context开始新的活动,但您必须在片段内使用getApplicationContext()(在活动内)或this

以下是Context and which one to use and when

的更多信息