İşte nasıl yaptım. Teknik olarak, diyaloğu teknik olarak açık tutmaz, anlık olarak kapatır ve tekrar açar, ancak net sonuç aynıdır.
class MyAlertDialog implements OnDismissListener, OnCancelListener {
final private EditText editText;
final private AlertDialog alertDialog;
final private EventManager eventManager;
final private CategorySelector categorySelector;
private Boolean canceled;
MyAlertDialog(Context context) {
editText = new EditText(context);
alertDialog = buildAlertDialog(context);
alertDialog.setOnDismissListener(this);
alertDialog.setOnCancelListener(this);
show();
}
private AlertDialog buildAlertDialog(Context context) {
return new AlertDialog.Builder(context)
.setTitle(context.getString(R.string.enter_name))
.setMessage(context.getString(R.string.enter_name))
.setView(editText)
.setNeutralButton(context.getString(R.string.save_text), null)
.setNegativeButton(context.getString(R.string.cancel_text), null)
.create();
}
public void show() {
canceled = false;
alertDialog.show();
}
@Override public void onDismiss(DialogInterface dialog) {
if(!canceled) {
final String name = editText.getText().toString();
if(name.equals("")) {
editText.setError("Please enter a non-empty name");
show();
} else {
doWhateverYouWantHere(name);
}
}
}
@Override public void onCancel(DialogInterface dialog) {
canceled = true;
}
}
Üzgünüm, sadece bu [bu (kabul edilmeyen) Söz] kopyasıdır fark (http://stackoverflow.com/q/4785571/403455). Bir kopya olarak kapatırdım, ama daha iyi bir cevap arıyorum. Cevap "hayır" ise, öyle olsun. –
Kendi özel diyaloğunuzu oluşturmak, [önceki sorulara] dayanarak gitmek için bir yol gibi görünüyor (http://stackoverflow.com/questions/4016313/how-to-keep-an-alertdialog-open-after-button-onclick- olan ateş). En basit çözüm olacak gibi görünüyor ve geçmişte yapmak zorunda olduğum şey bu. – theisenp
Sorunuzu oylarım. Anlaşılan rozetin sorular için geçerli olup olmadığını görelim :) – EboMike