我正在尝试构建一个非常简单的警报对话框流程。我构建了对话框,这样它唯一能做的就是显示警报。但它反而产生错误。
以下是我项目的相关代码:
Button button = (Button)findViewById(R.id.btnCancel);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Context appContext = getApplicationContext();
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(appContext);
alertDialogBuilder.setTitle("Your Title");
alertDialogBuilder
.setMessage("Click yes to exit!")
.setCancelable(false)
.setPositiveButton("Yes",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
try {
HttpResponse response=RestServicesCaller.cancelTransaction(transactionId);
} catch (JSONException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
})
.setNegativeButton("No",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
dialog.cancel();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
如果我在按下按钮时注释alertDialog.show()
,则没有任何反应(如预期的那样)。但是,如果我按下按钮打开它,它会强制关闭程序。是什么导致这个?
我认为这可能是xml的结果可能......?
答案 0 :(得分:1)
在创建对话框,祝酒等时不要使用应用程序上下文,而是使用活动上下文。
Button button = (Button)findViewById(R.id.btnCancel);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
new AlertDialog.Builder(MyActivity.this)
.setTitle("Your Title")
.setMessage("Click yes to exit!")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
try {
HttpResponse response = RestServicesCaller.cancelTransaction(transactionId);
} catch (JSONException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
})
.setNegativeButton("No",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
dialog.cancel();
}
})
.show();
}
});
MyActivity将是您的活动(如果它是一个片段,只需使用getActivity())。 BTW AlertDialog.Builder是一个构建器,意味着您实际上可以使用构建器模式; - )。
这是一篇关于何时使用哪种上下文的优秀文章:http://www.doubleencore.com/2013/06/context/
答案 1 :(得分:0)
以前的回答是正确的https://stackoverflow.com/a/17958395/1326308我认为在你的情况下最好使用 dialog.dismiss()而不是 dialog.cancel() < / p>