Android警报Dialog无法正常工作

时间:2011-11-06 06:18:45

标签: android alertdialog

AlertDialog.Builder builder;
    AlertDialog alertDialog;

    Context mContext = getApplicationContext();
    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
    View layout = inflater.inflate(R.layout.dialoglayout,
                                   (ViewGroup) findViewById(R.id.layout_root));

    TextView text = (TextView) layout.findViewById(R.id.text);
    text.setText("Hello, this is a custom dialog!");
    ImageView image = (ImageView) layout.findViewById(R.id.image);
    image.setImageResource(R.drawable.icon);

    builder = new AlertDialog.Builder(mContext);
    builder.setView(layout);
    alertDialog = builder.create();

    alertDialog.show();

任何人都可以告诉我这段代码的问题。它给出了以下例外:

11-06 11:44:20.572:ERROR / AndroidRuntime(339):致命异常:主要 11-06 11:44:20.572:ERROR / AndroidRuntime(339):java.lang.RuntimeException:无法启动活动ComponentInfo {com.andoroid.dialog / com.andoroid.dialog.AlertDialogTestActivity}:android.view.WindowManager $ BadTokenException :无法添加窗口 - 令牌null不适用于应用程序 11-06 11:44:20.572:ERROR / AndroidRuntime(339):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 11-06 11:44:20.572:ERROR / AndroidRuntime(339):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 11-06 11:44:20.572:ERROR / AndroidRuntime(339):在android.app.ActivityThread.access $ 2300(ActivityThread.java:125) 11-06 11:44:20.572:ERROR / AndroidRuntime(339):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2033) 11-06 11:44:20.572:ERROR / AndroidRuntime(339):在android.os.Handler.dispatchMessage(Handler.java:99) 11-06 11:44:20.572:ERROR / AndroidRuntime(339):在android.os.Looper.loop(Looper.java:123) 11-06 11:44:20.572:ERROR / AndroidRuntime(339):在android.app.ActivityThread.main(ActivityThread.java:4627) 11-06 11:44:20.572:ERROR / AndroidRuntime(339):at java.lang.reflect.Method.invokeNative(Native Method) 11-06 11:44:20.572:ERROR / AndroidRuntime(339):at java.lang.reflect.Method.invoke(Method.java:521) 11-06 11:44:20.572:ERROR / AndroidRuntime(339):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868) 11-06 11:44:20.572:ERROR / AndroidRuntime(339):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 11-06 11:44:20.572:ERROR / AndroidRuntime(339):at dalvik.system.NativeStart.main(Native Method) 11-06 11:44:20.572:ERROR / AndroidRuntime(339):引起:android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌null不适用于应用程序 11-06 11:44:20.572:ERROR / AndroidRuntime(339):在android.view.ViewRoot.setView(ViewRoot.java:509) 11-06 11:44:20.572:ERROR / AndroidRuntime(339):在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177) 11-06 11:44:20.572:ERROR / AndroidRuntime(339):在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 11-06 11:44:20.572:ERROR / AndroidRuntime(339):在android.app.Dialog.show(Dialog.java:241) 11-06 11:44:20.572:ERROR / AndroidRuntime(339):at com.andoroid.dialog.AlertDialogTestActivity.createDialog(AlertDialogTestActivity.java:48) 11-06 11:44:20.572:ERROR / AndroidRuntime(339):at com.andoroid.dialog.AlertDialogTestActivity.onCreate(AlertDialogTestActivity.java:22) 11-06 11:44:20.572:ERROR / AndroidRuntime(339):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 11-06 11:44:20.572:ERROR / AndroidRuntime(339):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)

2 个答案:

答案 0 :(得分:1)

我的想法:

1)使用当前活动而不是mContext = getApplicationContext();,例如:

LayoutInflater inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);

是指您在其中编写代码时的活动。

2)清除你的项目

答案 1 :(得分:1)

此外,如果您需要自定义Dialog,则无需夸大视图并使用AlertDialog.Builder。

相反,你可以这样做:

Dialog customDialog = new Dialog(YourActivity.this);
customDialog.setContentView(R.layout.dialoglayout);
TextView text = (TextView) customDialog.findViewById(R.id.text);
text.setText("Hello, this is a custom dialog!");
ImageView image = (ImageView) customDialog.findViewById(R.id.image);
image.setImageResource(R.drawable.icon);

customDialog.show();

您可以在Android开发指南中看到此示例: http://developer.android.com/guide/topics/ui/dialogs.html#CustomDialog