2009-11-19 6 views
0

J'ai trois EditField j'ai un setlistener ensemble pour le deuxième editfield seul. quand le focus est perdu je vérifie si le champ est vide ou pas si le champ est vide il montrera le message de popup .Maintenant le problème est une fois que l'utilisateur est venu à ce champ il ne pourrait pas se déplacer à d'autres champs Je veux que l'utilisateur peut se déplacer vers le champ qui est au dessus de ce champ et il ne pourrait pas se déplacer au champ ci-dessous. Comment gérer cette situation? S'il vous plaît partager vos idées.Comment gérer Focuschangelistener dans blackberry pour cette situation?

+0

, vous voulez permettre à l'utilisateur de passer champ vide au champ précédent mais interdit de se déplacer champ suivant? –

+0

oui exactement coldice – Kumar

Répondre

2

Je suppose que c'est pour la fonctionnalité de validation? Voir la stratégie de validation proposée: nous avons une interface IValidated qui peut être vérifié pour les données appropriée:

interface IValidated { 
public boolean validate(); 
} 

Maintenant, tous les domaines, comme la liste ou case à cocher ou choix peut la mettre en œuvre.
Ensuite, il y a un événement onFocus dans chaque champ, là vous pouvez valider le champ IViidated previouse et setFocus s'il échoue.

Voir un exemple EditField:

class ValidatedEdit extends BasicEditField implements IValidated { 
private static final String EMPTY_STRING = ""; 

public ValidatedEdit(String label, String value) { 
    super(label, value); 
} 

protected void onFocus(int direction) { 
    // it's from upper field 
    if (direction > 0 && getIndex() > 0) { 
    // get upper field 
    Field field = getManager().getField(getIndex() - 1); 
    // if its IValidated 
    if (field instanceof IValidated) { 
    IValidated validated = (IValidated) field; 
    // validate, if false set focus to IValidated 
    if (!validated.validate()) { 
    field.setFocus(); 
    return; 
    } 
    } 
    } 
    super.onFocus(direction); 
} 

public boolean validate() { 
    return !getText().equalsIgnoreCase(EMPTY_STRING); 
} 
} 

Exemple d'utilisation:

class Scr extends MainScreen { 
ValidatedEdit mEditField1 = new ValidatedEdit("field#1", ""); 
ValidatedEdit mEditField2 = new ValidatedEdit("field#2", ""); 
ValidatedEdit mEditField3 = new ValidatedEdit("field#3", ""); 

public Scr() { 
    add(mEditField1); 
    add(mEditField2); 
    add(mEditField3); 
} 
} 
Questions connexes