Der schlimmste Feind eines Entwicklers ist der unerfahrene und ambitionierte User. Diese Art von User bringt die App / das Programm an ihre / seine Grenzen. Besonders Abweichungen vom Use-Case und willkürliche Benutzereingaben erfordern höchste Konzentration und Vorstellungskraft des Entwicklers. Neben der eigentlichen Validierung der Eingaben ist auch das Benutzerfeedback sehr wichtig. In dem heutigen Beitrag zeige ich euch wie man in einer Android App, meiner Meinung nach, gutes Benutzerfeedback nach einer Validierung gibt.
An dieser Stelle kann man sich Streiten und es gibt verschiedene Meinungen. Ich bin aber der Meinung, dass man so früh wie möglich dem Benutzer Feedback geben sollte. Nicht bei jeder einzelnen Eingabe sofort, aber pro Wort oder nach dem Verlassen des Feldes zum Beispiel. Das hat den Vorteil, dass man per Auto Complete den Benutzer helfen kann und ggf. auftretende Fehler schnell korrigiert werden können.
Die Kollegen von Java Code Geeks haben dazu ein sehr gutes Tutorial/Howto geschrieben. Das Tutorial/Howto wurde im Januar 2014 veröffentlicht, daher gilt es auch für Android 4.4 Kitekat und Android 5.0 Lollipop.
Kommen wir nun zum praktischen Teil! Android bietet schon von Haus aus eine schöne Funktion an, um Validierungsfehler anzuzeigen. Die Funktion heißt „setError“ und ist seit API Version 1 bei jedem EditText dabei. (Siehe Zeile 46, 51 und 56) Sollten mehrere Felder validiert werden, würde ich zusätzlich einen Toast empfehlen. (Siehe Zeile 61)
package de.axxg.validierungsfehler; import android.app.Fragment; import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class KontaktFragment extends Fragment { private EditText nameET; private EditText mailET; private EditText messageET; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // View holen View v = inflater.inflate(R.layout.kontakt_fragment, container, false); nameET = (EditText) v.findViewById(R.id.kontakt_name); mailET = (EditText) v.findViewById(R.id.kontakt_mail); messageET = (EditText) v.findViewById(R.id.kontakt_message); // Button Button sendBtn = (Button) v.findViewById(R.id.kontakt_btn); sendBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { sendMail(); } }); return v; } private void sendMail() { // validieren boolean isValid = true; if(nameET.getText().length() < 3){ nameET.setError(getActivity().getText(R.string.kontakt_err_name)); isValid = false; } if(!android.util.Patterns.EMAIL_ADDRESS.matcher(mailET.getText()).matches()){ mailET.setError(getActivity().getText(R.string.kontakt_err_mail)); isValid = false; } if(messageET.getText().length() < 1){ messageET.setError(getActivity().getText(R.string.kontakt_err_message)); isValid = false; } if(!isValid){ Toast.makeText(getActivity(), getActivity().getText(R.string.kontakt_err_send), Toast.LENGTH_LONG).show(); return; } // alles ist valid!! Intent i = new Intent(Intent.ACTION_SEND); i.setType("message/rfc822"); i.putExtra(Intent.EXTRA_EMAIL, new String[] { "beispiel@axxg.de" }); i.putExtra(Intent.EXTRA_SUBJECT, getActivity().getText(R.string.app_name) + " von " + nameET.getText() + "(" + mailET.getText() + ")"); i.putExtra(Intent.EXTRA_TEXT, messageET.getText().toString()); try { getActivity().startActivity(Intent.createChooser(i, "Mail-Apps:")); nameET.setText(""); mailET.setText(""); messageET.setText(""); Toast.makeText(getActivity(), getActivity().getText(R.string.kontakt_info_send), Toast.LENGTH_LONG).show(); } catch (android.content.ActivityNotFoundException ex) { Toast.makeText(getActivity(), getActivity().getText(R.string.kontakt_err_send), Toast.LENGTH_LONG).show(); } } }
Das Ergebnis sieht dann so aus:
Für Faule gibt es hier das fertige Projekt…
Copyright © 2015 AxxG – Alexander Gräsel
Kommentar verfassen