J'ai un nombre de EditText
s 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.
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.
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
.
Cela fonctionne pour moi. Il retourne un booléen.
myEditText.hasFocus()
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é.
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.
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
}
}