web-dev-qa-db-fra.com

Comment détecter un EditText ciblé dans Android?

J'ai un nombre de EditTexts dans ma page avec deux boutons. Je veux que l'utilisateur touche à l'un des champs EditText et clique sur n'importe quel bouton pour insérer une certaine valeur dans ce très EditText champ qu'il a touché. La saisie à l'aide du clavier n'est pas autorisée. S'il vous plaît aidez-moi à le faire.

28
Eclipse-fan

Une chose que vous pouvez faire est de déclarer une variable globale evalue qui vous indiquera quel est le last selected EditText en utilisant onTouchListener puis en vous basant sur la valeur de evalue, vous pouvez définir la valeur du texte sur edittext par un clic de bouton. espérons que vous avez compris.

le code pour cela peut être comme suit:

EditText e1,e2;
    Button b1,b2;
    String evalue;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        e1=(EditText)findViewById(R.id.editText1);
        e2=(EditText)findViewById(R.id.editText2);
        b1=(Button)findViewById(R.id.button1);
        b2=(Button)findViewById(R.id.button2);

        e1.setOnTouchListener(new View.OnTouchListener()
        {
            public boolean onTouch(View arg0, MotionEvent arg1)
            {
                evalue="1";
                return false;
            }
        });

        e2.setOnTouchListener(new View.OnTouchListener()
        {
            public boolean onTouch(View arg0, MotionEvent arg1)
            {
                evalue="2";
                return false;
            }
        });
        b1.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View arg0) {
                if(evalue=="1")
                {
                    e1.setText("yes");
                }
                if(evalue=="2")
                {
                    e2.setText("yes");
                }
            }
        });


        b2.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View arg0) {
                if(evalue=="1")
                {
                    e1.setText("No");
                }
                if(evalue=="2")
                {
                    e2.setText("No");
                }
            }
        });

    }

C’est un codage logique .. pas jusqu’à la marque .. si vous en trouvez un meilleur. puis utilisez-le. Je vous remercie.

18
Ankit Dhadse

Vous pouvez utiliser View.OnFocusChangeListener pour détecter si une vue (edittext) gagne ou perd le focus.

for (EditText view : editList){
   view.setOnFocusChangeListener(focusListener);
}
....
private OnFocusChangeListener focusListener = new OnFocusChangeListener() {
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus){
             focusedView = v;
        } else {
             focusedView  = null;
        }
    }
}

Cela va dans votre activité ou fragment ou partout où vous avez les EditTexts. Le .... indique simplement que vous pouvez le placer n'importe où dans la classe. Et évidemment, vous devrez créer un tableau avec eux, donc la variable editList.

48
Mr.Me

Cela fonctionne pour moi. Il retourne un booléen. 

myEditText.hasFocus()
28
Lilylakshi

Demandez à votre Fragment d'implémenter OnTouchListener & OnFocusChangeListener:

public class AttributesFragment extends Fragment 
                       implements OnTouchListener, OnFocusChangeListener {

Puis implémentez en utilisant:

@Override
public boolean onTouch(View view, MotionEvent event) {
    if (view instanceof EditText) {
        view.setOnFocusChangeListener(this); // User touched edittext
    }
    return false;
}

@Override
public void onFocusChange(View v, boolean hasFocus) {

}

N'oubliez pas de définir votre auditeur après avoir créé votre EditText

editText.setOnTouchListener(this);

Ainsi, si une boîte EditText est activée par défaut mais que l'utilisateur n'a pas modifié le champ, l'événement onFocusChange ne sera pas déclenché.

7
goodies4uall

Cela a fonctionné pour moi.

e1 = (EditText) findViewById(R.id.editText1);

e1.setOnFocusChangeListener(new View.OnFocusChangeListener() {
   @Override
   public void onFocusChange(View arg0, boolean hasfocus) {
      if (hasfocus) {
         Log.e("TAG", "e1 focused") 
      } else {
         Log.e("TAG", "e1 not focused") 
      }            
   }
});

Avec Java 8 lambdas:

EditText editTextTo = findViewById(R.id.editTextTo);

editTextTo.setOnFocusChangeListener((view, b) -> {
    if (view.isFocused()) {
        // Do whatever you want when the EditText is focused 
        // Example:
        editTextFrom.setText("Focused!");
    }
});

Notez que la vue à l'intérieur de la fonction lambda est en fait une instance d'un EditText.

0
Raul Olmedo

Dans votre activité ou votre fragment, implémentez OnFocusChangeListener. 

edittextNeme= (EditText) findViewById(R.id.edittextNeme);
edittextNeme.setOnFocusChangeListener(this);

Vous devrez vérifier quelle vue a changé de focus en obtenant l'identifiant de vue avec view.getId () et le gérer en conséquence.

@Override
public void onFocusChange(View view, boolean hasfocus) {
    switch(view.getId()){
    case R.id.edittextNeme:
    //Do something
    break;

    ...etc
    }
}
0
Sayan Manna