我已经设置了一个AlertDialog
这样的:
AlertDialog.Builder noteAlert = new AlertDialog.Builder(ClassName.this);
noteAlert.setTitle("Title");
noteAlert.setMessage("Message");
noteAlert.setPositiveButton("Positive", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// some code
}
});
noteAlert.setNeutralButton("Positive", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// some code
}
});
noteAlert.setNegativeButton("Positive", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// some code
}
});
AlertDialog alertDialog = noteAlert.create();
Button deleteButton = alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE);
if (someCondition != 1)
// code runs till here
deleteButton.setEnabled(false); // code works on deleting this line
noteAlert.show();
当我运行上面的代码时,它会一直工作到该if
语句。然后应用程序崩溃(我假设getButton()
抛出 NPE)。我在 SO 上看到了许多其他答案,它们给出了与禁用按钮的解决方案相同的代码。
当我注释掉该setEnabled()
行时,该应用程序工作正常(只有按钮未禁用)。所以基本上我试图禁用这个 NegativeButton 并且它不起作用。你们能提出一些解决方案吗?
日志猫:
07-13 08:01:14.378: D/ViewRootImpl(19779): ViewRoot TouchDown(Absolute) DOWN (380, 691)
07-13 08:01:14.495: E/dialog(19779): AlertDiablog 开始
07-13 08:01:14.495: E/hasnote(19779): 0
07-13 08:01:14.511: E/hasnote(19779): 0
07-13 08:01:14.511: D/AndroidRuntime(19779): 关闭 VM
07-13 08:01:14.511: W/dalvikvm(19779): threadid=1: 线程以未捕获的异常退出 (group=0x40e392a0)
07-13 08:01:14.519:E/AndroidRuntime(19779):致命异常:主要
07-13 08:01:14.519: E/AndroidRuntime(19779): java.lang.NullPointerException
07-13 08:01:14.519: E/AndroidRuntime(19779): 在 com.example.sherlockcaldroid2.TestSubjectCalendar$1$2.onClick(TestSubjectCalendar.java:250)
07-13 08:01:14.519: E/AndroidRuntime(19779): 在 com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:1 66)
07-13 08:01:14.519: E/AndroidRuntime(19779): 在 android.os.Handler.dispatchMessage(Handler.java:99)
07-13 08:01:14.519: E/AndroidRuntime(19779): 在 android.os.Looper.loop(Looper.java:137)
07-13 08:01:14.519: E/AndroidRuntime(19779): 在 android.app.ActivityThread.main(ActivityThread.java:4849)
07-13 08:01:14.519: E/AndroidRuntime(19779): 在 java.lang.reflect.Method.invokeNative(Native Method)
07-13 08:01:14.519: E/AndroidRuntime(19779): 在 java.lang.reflect.Method.invoke(Method.java:511)
07-13 08:01:14.519: E/AndroidRuntime(19779): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
07-13 08:01:14.519: E/AndroidRuntime(19779): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
07-13 08:01:14.519: E/AndroidRuntime(19779): at dalvik.system.NativeStart.main(Native Method)
07-13 08:01:34.089: I/Process(19779): 发送信号。PID:19779 SIG:9