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.
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);
}
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);
}
}
});
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);
}
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);
}
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
}
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;
}