Die Antwort unter dieser Link ist eine einfache Lösung, die bis zu API 3 zurück kompatibel ist und der Lösung von Tom Bollwitt sehr ähnlich ist, aber ohne den weniger kompatiblen OnShowListener.
Ja, das können Sie. Im Grunde müssen Sie das:
- Erstellen Sie den Dialog mit DialogBuilder
- show() den Dialog
- Suchen Sie die Schaltflächen im angezeigten Dialog und überschreiben Sie deren onClickListener
Ich habe kleinere Anpassungen an Kamen's Code vorgenommen, da ich eine EditTextPreference erweitert habe.
@Override
protected void showDialog(Bundle state) {
super.showDialog(state);
class mocl implements OnClickListener{
private final AlertDialog dialog;
public mocl(AlertDialog dialog) {
this.dialog = dialog;
}
@Override
public void onClick(View v) {
//checks if EditText is empty, and if so tells the user via Toast
//otherwise it closes dialog and calls the EditTextPreference's onClick
//method to let it know that the button has been pressed
if (!IntPreference.this.getEditText().getText().toString().equals("")){
dialog.dismiss();
IntPreference.this.onClick(dialog,DialogInterface.BUTTON_POSITIVE);
}
else {
Toast t = Toast.makeText(getContext(), "Enter a number!", Toast.LENGTH_SHORT);
t.show();
}
}
}
AlertDialog d = (AlertDialog) getDialog();
Button b = d.getButton(DialogInterface.BUTTON_POSITIVE);
b.setOnClickListener(new mocl((d)));
}
Was für ein Spaß!