只是一个简单的事情,应用程序应该在单击按钮时显示对话框。但是当它被点击时,它就崩溃了。而且我不明白试图说出的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();
。这里有什么问题?
答案 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
。