Android:AlertDialog 不会在 Cancel() 或 Dismiss() 上关闭
Android: AlertDialog not closing on Cancel() nor on Dismiss()
我实现了一个 AlertDialog,它用作消息对话框。当用户键入消息时,他可以单击按钮 "SEND" 或按钮 "CANCEL"。按钮 "SEND" 工作正常,但取消按钮由于某种原因不起作用。
findViewById(R.id.contactfab).setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(Frontpage.this);
final AlertDialog dialog = dialogBuilder.create();
LayoutInflater inflater = Frontpage.this.getLayoutInflater();
View dialogView = inflater.inflate(R.layout.dialog_contact, null);
dialogBuilder.setView(dialogView);
final EditText editText = (EditText) dialogView.findViewById(R.id.contactText);
editText.setText("");
dialogView.findViewById(R.id.send_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String [] reciever = new String[]{"test@hotmail.com"};
String subject = ("Feedback");
Intent mailIntent = new Intent(Intent.ACTION_SEND);
mailIntent.putExtra(Intent.EXTRA_EMAIL, reciever);
mailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
mailIntent.putExtra(Intent.EXTRA_TEXT, editText.getText().toString());
mailIntent.setType("message/rfc822");
startActivity(Intent.createChooser(mailIntent, "Vælg en applikation til at sende din mail med"));
}
});
dialogView.findViewById(R.id.cancel_button).setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
dialog.cancel();
}
});
dialogBuilder.show();
}
});
为了测试它是否在监听取消按钮,我试着让它在点击按钮时打印一个字符串。字符串被打印出来,但对话框没有关闭。 dialog.dismiss()
和 dialog.dismiss()
都试过了
我错过了什么?
当您调用 dialogBuilder.show();
时,它将使用提供给构建器的参数创建一个新的 AlertDialog 并立即显示该对话框。因此,这个新的 AlertDialog
将与使用 final AlertDialog dialog
声明的不同。简而言之,您的代码 dialog
声明将永远不会显示,因此 dialog.cancel()
或 dialog.close()
不会产生任何影响。
按如下方式更改您的代码:
findViewById(R.id.contactfab).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view){
final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(Frontpage.this);
LayoutInflater inflater = Frontpage.this.getLayoutInflater();
View dialogView = inflater.inflate(R.layout.dialog_contact, null);
dialogBuilder.setView(dialogView);
final EditText editText = (EditText) dialogView.findViewById(R.id.contactText);
editText.setText("");
final AlertDialog dialog = dialogBuilder.create();
dialogView.findViewById(R.id.send_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String [] reciever = new String[]{"test@hotmail.com"};
String subject = ("Feedback");
Intent mailIntent = new Intent(Intent.ACTION_SEND);
mailIntent.putExtra(Intent.EXTRA_EMAIL, reciever);
mailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
mailIntent.putExtra(Intent.EXTRA_TEXT, editText.getText().toString());
mailIntent.setType("message/rfc822");
startActivity(Intent.createChooser(mailIntent, "Vælg en applikation til at sende din mail med"));
}
});
dialogView.findViewById(R.id.cancel_button).setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view) {
dialog.cancel();
}
});
dialog.show();
}
});
}
我实现了一个 AlertDialog,它用作消息对话框。当用户键入消息时,他可以单击按钮 "SEND" 或按钮 "CANCEL"。按钮 "SEND" 工作正常,但取消按钮由于某种原因不起作用。
findViewById(R.id.contactfab).setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(Frontpage.this);
final AlertDialog dialog = dialogBuilder.create();
LayoutInflater inflater = Frontpage.this.getLayoutInflater();
View dialogView = inflater.inflate(R.layout.dialog_contact, null);
dialogBuilder.setView(dialogView);
final EditText editText = (EditText) dialogView.findViewById(R.id.contactText);
editText.setText("");
dialogView.findViewById(R.id.send_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String [] reciever = new String[]{"test@hotmail.com"};
String subject = ("Feedback");
Intent mailIntent = new Intent(Intent.ACTION_SEND);
mailIntent.putExtra(Intent.EXTRA_EMAIL, reciever);
mailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
mailIntent.putExtra(Intent.EXTRA_TEXT, editText.getText().toString());
mailIntent.setType("message/rfc822");
startActivity(Intent.createChooser(mailIntent, "Vælg en applikation til at sende din mail med"));
}
});
dialogView.findViewById(R.id.cancel_button).setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
dialog.cancel();
}
});
dialogBuilder.show();
}
});
为了测试它是否在监听取消按钮,我试着让它在点击按钮时打印一个字符串。字符串被打印出来,但对话框没有关闭。 dialog.dismiss()
和 dialog.dismiss()
我错过了什么?
当您调用 dialogBuilder.show();
时,它将使用提供给构建器的参数创建一个新的 AlertDialog 并立即显示该对话框。因此,这个新的 AlertDialog
将与使用 final AlertDialog dialog
声明的不同。简而言之,您的代码 dialog
声明将永远不会显示,因此 dialog.cancel()
或 dialog.close()
不会产生任何影响。
按如下方式更改您的代码:
findViewById(R.id.contactfab).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view){
final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(Frontpage.this);
LayoutInflater inflater = Frontpage.this.getLayoutInflater();
View dialogView = inflater.inflate(R.layout.dialog_contact, null);
dialogBuilder.setView(dialogView);
final EditText editText = (EditText) dialogView.findViewById(R.id.contactText);
editText.setText("");
final AlertDialog dialog = dialogBuilder.create();
dialogView.findViewById(R.id.send_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String [] reciever = new String[]{"test@hotmail.com"};
String subject = ("Feedback");
Intent mailIntent = new Intent(Intent.ACTION_SEND);
mailIntent.putExtra(Intent.EXTRA_EMAIL, reciever);
mailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
mailIntent.putExtra(Intent.EXTRA_TEXT, editText.getText().toString());
mailIntent.setType("message/rfc822");
startActivity(Intent.createChooser(mailIntent, "Vælg en applikation til at sende din mail med"));
}
});
dialogView.findViewById(R.id.cancel_button).setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view) {
dialog.cancel();
}
});
dialog.show();
}
});
}