web-dev-qa-db-fra.com

Le champ editText est obligatoire avant de passer à une autre activité

J'ai une validation pour editText. Si le champ editText est vide, la validation devrait échouer et empêcher l'utilisateur de passer à un autre Activity, car une valeur est requise. Comment faire? Je sais que c'est une question fondamentale, mais je ne sais pas comment faire cela.

Mon code:

btninsert = (Button)findViewById(R.id.btn_insert);
btninsert.setOnClickListener( new View.OnClickListener() {
    public void onClick(View v) {
        insertValues();
        EditText userName = (EditText) findViewById(R.id.editText1);

        if( userName.getText().toString().length() == 0 )
            userName.setError( "First name is required!" );

        Intent i = new Intent(getApplicationContext(), Login.class);
        startActivity(i);
    }
});

Lorsque ce Button est cliqué, l'utilisateur est redirigé vers l'écran suivant, mais j'ai besoin que si la validation échoue, il reste sur le Activity actuel, et uniquement lorsque la validation est réussie (c'est-à-dire qu'une valeur a été entrée ) ils passent au Activity suivant.

25
Krishna Veni

C'est simple ... vérifiez si votre EditText est vide comme dans l'exemple ci-dessous.

if( TextUtils.isEmpty(userName.getText())){
   /**
    *   You can Toast a message here that the Username is Empty    
    **/

   userName.setError( "First name is required!" );

}else{
   Intent i = new Intent(getApplicationContext(), Login.class);
   startActivity(i);
}
64
Haresh Chaudhary

Essaye ça:

bt.setOnClickListener(new OnClickListener() {
    public void onClick(View arg0)
    {
        String  str=et.getText().toString();

        if(str.equalsIgnoreCase(""))
        {
            et.setHint("please enter username");//it gives user to hint
            et.setError("please enter username");//it gives user to info message //use any one //
        }
        else
        {
            Intent in=new Intent(getApplicationContext(),second.class);
            startActivity(in);
        }
    }
});
7
Rajender Reddy

Vous pouvez également essayer ceci:

 if ( ( userName.getText().toString().trim().equals("")) ) 
 {
      Toast.makeText(getApplicationContext(), "User name is empty", Toast.LENGTH_SHORT).show();
 }
 else
 {
      Intent i = new Intent(getApplicationContext(), Login.class);
      startActivity(i);
 }
5
fidazik

Je comprends que c'est une vieille question, mais que cela aide, vous pouvez utiliser .isEmpty () au lieu de .equals ()

if( userName.getText().toString().isEmpty()){

   /**
    *   You can Toast a message here that the Username is Empty    
    **/

   userName.setError( "First name is required!" );

}else{
   Intent i = new Intent(getApplicationContext(), Login.class);
   startActivity(i);
}
3
XIII

Mieux vaut tester textField vide en utilisant la condition If pour tous les cas de validation requis ou spéciaux et définissezError sur focus.

If(txtName.getText().toString().trim().equals(""))
{
//Your message or any other validation
}
2
Akshay Mishra

J'ai fait face à un problème similaire. Dans mon cas, j'avais beaucoup d'Edittexts à vérifier, certains d'entre eux étaient l'enfant d'une autre mise en page. Conseil: toutes les vues doivent être dans la même vue racine. Donc, pour être simple:

...
LinearLayout viewGroup = (LinearLayout) findViewById(R.id.viewGroup);
checkFieldsRequired(viewGroup);
...

public boolean checkFieldsRequired(ViewGroup viewGroup){

    int count = viewGroup.getChildCount();
    for (int i = 0; i < count; i++) {
        View view = viewGroup.getChildAt(i);
        if (view instanceof ViewGroup)
            checkFieldsRequired((ViewGroup) view);
        else if (view instanceof EditText) {
            EditText edittext = (EditText) view;
            if (edittext.getText().toString().trim().equals("")) {                  
                edittext.setError("Required!");                 
            }
        }
    }

    return false;
}
2
Leonardo Costa