0
我只希望我的AlertDialog
在滿足某些條件時(當給出的名稱和姓氏有效時)被解僱 - 否則它應始終位於父視圖的頂部。我的代碼是這樣的:AlertDialog與LinearLayout不應該關閉按鈕單擊
final AlertDialog.Builder alert = new AlertDialog.Builder(this);
final TextView instructions = new TextView(this);
instructions.setText(R.string.alert_enter_data);
final EditText name = new EditText(this);
name.setHint(R.string.name);
final EditText surname = new EditText(this);
surname.setHint(R.string.surname);
LinearLayout ll=new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
ll.addView(instructions);
ll.addView(name);
ll.addView(surname);
alert.setView(ll);
alert.setNeutralButton(R.string.enter, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String name_txt = name.getText().toString();
String surname_txt = surname.getText().toString();
if ((name_txt.length() > 1) && (surname_txt.length() > 1)) {
dialog.dismiss();
}
}
});
final AlertDialog alert_dialog = alert.create();
alert_dialog.setCanceledOnTouchOutside(false);
alert_dialog.show();
這段代碼的AlertDialog
按下按鈕時消失,不管輸入文字。然後我試了這個:
alert_dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
Button b = alert.getButton(AlertDialog.BUTTON_POSITIVE);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String name_txt = name.getText().toString();
String surname_txt = surname.getText().toString();
String email_txt = email.getText().toString();
String cellphone_txt = cellphone.getText().toString();
String postcode_txt = postcode.getText().toString();
if ((name_txt.length() > 1) && (surname_txt.length() > 1) && (email_txt.length() > 4)) {
if (debug_mode) {Log.i(TAG,"clause 1");}
String data_to_upload = name_txt + ", " + surname_txt + ", " + email_txt + ", "+ cellphone_txt + ", " + postcode_txt + "\n";
// upload_to_github(data_to_upload);
alert_dialog.dismiss();
}
}
});
}
});
但是這樣我得到的不是按鈕。警報對話框只包含EditText字段。
你看過這裏嗎?:http://stackoverflow.com/a/27345656/2910520。您需要重寫按鈕偵聽器,以防止AlertDialog在選擇單擊時使用'dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(...)'關閉自身。你可以刪除showListener,因爲它是沒有必要的,在修改按鈕監聽器 – MatPag
之前,你需要'create()'和'show()'對話框,這就是我在第二個代碼片段中做的事情,但是這樣我根本沒有得到任何按鈕 - 我估計是因爲我使用了「LinearLayout」,但我在這裏輸了。 –