web-dev-qa-db-fra.com

Android setError ("error") ne fonctionne pas dans Textview

Nous pouvons définir l'erreur dans Edittext avec succès, mais nous n'avons pas réussi à la définir dans textview. y a-t-il un problème?? j'ai essayé

((TextView) findViewById(R.id.df)).requestFocus();
((TextView) findViewById(R.id.df)).setSelected(true);
((TextView) findViewById(R.id.df)).setError("akjshbd");

mais je ne reçois pas de popup d'erreur.

Textview Error

30
Bhavesh Hirpara

En fait, vous pouvez utiliser setError pour le textView et afficher sa fenêtre contextuelle.

Il vous suffit d'utiliser le même style que celui de l'EditText.

Ajoutez simplement l'attribut suivant pour le textView dans le xml:

style="@Android:style/Widget.EditText"
35
android developer

TextView par défaut n'est PAS focalisable. Donc, vous devez définir Android: focusable = "true" et Android: focusableInTouchMode = "true".

<TextView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:focusable="true"
    Android:focusableInTouchMode="true"
    Android:text="@string/hello_world" />

Et pas besoin de définir setSelected (true).

((TextView) findViewById(R.id.df)).requestFocus();
((TextView) findViewById(R.id.df)).setError("akjshbd");
92
nagoya0

C'est le seul dont vous avez besoin pour obtenir le comportement setError attendu sur TextView

Android:focusable="true"
Android:clickable="true"
Android:focusableInTouchMode="true"
12
cesards

Extrait: vous devez demander Focus (); une vue pour montrer l'erreur.

    // Check for a valid email address.
if (TextUtils.isEmpty(mEmail)) {
    mEmailView.setError(getString(R.string.error_field_required));
    focusView = mEmailView;
    cancel = true;
} else if (!mEmail.contains("@")) {
    mEmailView.setError(getString(R.string.error_invalid_email));
    focusView = mEmailView;
    cancel = true;
}

if (cancel) {
    // There was an error; don't attempt login and focus the first
    // form field with an error.
    focusView.requestFocus();
} else {
    // Show a progress spinner, and kick off a background task to
    // perform the user login attempt.
    // showProgress(true);
    // mAuthTask = new UserLoginTask();
    // mAuthTask.execute((Void) null);
    ParseUser.logInInBackground(mEmail, mPassword, new LogInCallback() {

    @Override
    public void done(ParseUser user, ParseException e) {
        finishAndStartCardActivity();
    }
    });
}
5
Philippe David