@Override
protected Dialog onCreateDialog(int id)
{
final AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("Test");
alert.setIcon(R.drawable.logo1);
alert.setMessage("Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nam cursus.");
LinearLayout lila1= new LinearLayout(this);
lila1.setOrientation(1); //1 is for vertical orientation
final EditText input = new EditText(this);
final EditText input1 = new EditText(this);
input.setId(0);
input1.setId(1);
input.setHint("Enter your email");
input1.setHint("Enter your message");
input1.setHeight(200);
lila1.addView(input);
lila1.addView(input1);
alert.setView(lila1);
alert.setPositiveButton("Send", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
String value = input.getText().toString().trim();
String value1 = input1.getText().toString().trim();
int emailIn= input.getText().toString().length();
int message=input1.getText().toString().length();
if( emailIn == 0 || message==0 )
{
if(emailIn==0)
{
input.setError("Name is Required");
//DialogBox should not close.
}
if(message==0)
{
input1.setError("Description is Required");
//DialogBox should not close.
}
}
else
{
// Toast.makeText(getApplicationContext(), value, Toast.LENGTH_SHORT).show();
// Toast.makeText(getApplicationContext(), value1, Toast.LENGTH_SHORT).show();
Intent email = new Intent(Intent.ACTION_SEND);
email.putExtra(Intent.EXTRA_EMAIL, new String[]{getResources().getString(R.string.toEmail)});
email.putExtra(Intent.EXTRA_SUBJECT, "Test");
email.putExtra(Intent.EXTRA_TEXT, value + value1);
email.setType("message/rfc822");
startActivity(Intent.createChooser(email, "Choose an Email:"));
}
}});
alert.setNegativeButton("Cancel",
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton) {
dialog.cancel();
}});
return alert.create();
}
}
我正在检查 setPositiveButton 中的条件。但在检查条件后,警报框会自动关闭。我希望警报框显示,直到该过程完成。我已经实现了很多东西,但无法找到解决方案。
答案 0 :(得分:1)
尝试以下方法:
//Create the alert with builder the following way
alert.setPositiveButton("Send", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {}
});
this.alert = alert.create();
this.alertReady = false;
/*
* Add an OnShowListener to change the OnClickListener on the
* first time the alert is shown. Calling getButton() to get the positive button
* before the alert is shown will return null. Then using a regular
* View.OnClickListener will not dismiss the AlertDialog
* after it has been called which should do the trick.
*/
alert.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
if (alertReady == false) {
Button button = alert.getButton(DialogInterface.BUTTON_POSITIVE);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//do your controls here
String value = input.getText().toString().trim();
String value1 = input1.getText().toString().trim();
int emailIn= input.getText().toString().length();
int message=input1.getText().toString().length();
if( emailIn == 0 || message==0 )
{
if(emailIn==0)
{
input.setError("Name is Required");
}
if(message==0)
{
input1.setError("Description is Required");
//DialogBox should not close.
}
}
});
alertReady = true;
}
}
});
答案 1 :(得分:1)
我曾尝试过一次,但无法找到解决方案,所以这就是我所做的。 Donot使用setPositiveButton
或negative
或neutral
按钮,因为所有这些都是默认关闭对话框。所以既然你已经创建了LinearLayout lila1= new LinearLayout(this);
,只需动态添加两个按钮并在其上添加click listner,当你完成逻辑调用onBackPressed()
以下是代码:
LinearLayout lila1= new LinearLayout(this);
LinearLayout linbuttons = new LinearLayout(this);
linbuttons.setOrientation(LinearLayout.HORIZONTAL);
Button btnPositive = new Button(this);
Button btnNegative = new Button(this);
btnPositive.setText("Send");
btnPositive.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// write your code for sending
onBackPressed();
}
});
btnNegative.setText("Cancel");
btnNegative.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
linbuttons.addView(btnPositive);
linbuttons.addView(btnNegative);
lila1.addView(linbuttons);