问题
When the user clicks on the save button, an AlertDialog
appears and asks the user to input text for the file name.
If the user clicks the positive button ("Ok") without specifying a name, I want to display a toast which asks them to do so, and keep the AlertDialog
open. But the toast never displays and the dialog closes.
The code for the AlertDialog
is here:
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle(R.string.save_game);
alert.setMessage(R.string.request_name);
// Set an EditText view to get user input
final EditText input = new EditText(this);
input.setHint(R.string.untitled);
alert.setView(input);
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String value = input.getText().toString();
if(value != null){
// Do something with value
}
else{
Toast.makeText(context, R.string.no_name_given, Toast.LENGTH_SHORT).show();
}
}
});
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// Canceled.
}
});
alert.show();
How can I make this happen?
Thanks!
回答1:
Public void showToast() {
Toast.makeText(this, R.string.no_name_given, Toast.LENGTH_SHORT).show();
}
Just call this method instead of displaying toast from an alert dialog box like this in your code.
else {
showToast();
}
To keep it open use this method
public void forceOpen() {
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle(R.string.save_game);
alert.setMessage(R.string.request_name);
// Set an EditText view to get user input
final EditText input = new EditText(this);
input.setHint(R.string.untitled);
alert.setView(input);
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String value = input.getText().toString();
if(value != null) {
// Do something with value
}
else {
Toast.makeText(context, R.string.no_name_given, Toast.LENGTH_SHORT).show();
}
}
});
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// Canceled.
}
});
alert.show();
}
Just reopen it.. Not sure why it closes but this will work
回答2:
Change the code as follows:
if(value != null && value.length()>0){
// Do something with value
}else{
Toast.makeText(context, R.string.no_name_given, Toast.LENGTH_SHORT).show();
}
回答3:
You can disable the Ok button.If the condition is validate,then enable button again.
回答4:
public void alert()
{
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.simple, null);
final EditText etText = (EditText) v.findViewById(R.id.etName);
final AlertDialog d = new AlertDialog.Builder(this)
.setView(v)
.setTitle("Warning ..")
.setPositiveButton(android.R.string.ok,
new Dialog.OnClickListener() {
@Override
public void onClick(DialogInterface d, int which)
{
//Do nothing here. We override the onclick
Toast.makeText(getApplicationContext(), "Enter Text", Toast.LENGTH_LONG).show();
}
})
.setNegativeButton(android.R.string.cancel, null)
.create();
d.show();
}
回答5:
A simple way what worked for me to get Context from AlertDialog's OnClick method using DialogInterface:
((Dialog) dialogInterface).getContext()
Using it in OnClick() method:
public void onClick(DialogInterface dialogInterface, int which) {
Toast.makeText(((Dialog) dialogInterface).getContext(), "Bla-bla" , Toast.LENGTH_SHORT).show();
}
来源:https://stackoverflow.com/questions/18009822/how-to-display-toast-from-alertdialog