it-swarm.com.de

Wie kann ich fokussiertes EditText in Android erkennen?

Auf meiner Seite befinden sich mehrere EditTexts und zwei Schaltflächen. Ich möchte, dass der Benutzer ein beliebiges EditText-Feld berührt und auf eine beliebige Schaltfläche klickt, um einen bestimmten Wert in dieses sehr EditText-Feld einzufügen, das er berührt hat. Die Eingabe über die Tastatur ist nicht zulässig. Bitte hilf mir dabei.

28
Eclipse-fan

Sie können zum Beispiel eine globale Variable evalue deklarieren, die Ihnen mit onTouchListener den last selected EditText anzeigt. Anschließend können Sie den Textwert auf evalue setzen, indem Sie auf den Button klicken. hoffe du hast verstanden.

der Code dafür kann wie folgt aussehen:

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

    }

Es ist eine logische Kodierung .. nicht bis zur Marke .. wenn Sie eine bessere finden. dann verwenden Sie es. Danke dir.

18
Ankit Dhadse

Sie können View.OnFocusChangeListener verwenden, um festzustellen, ob eine Ansicht (edittext) den Fokus erlangt oder verloren hat.

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

Dies gilt für Ihre Aktivität oder Ihr Fragment oder wo auch immer Sie die EditTexts haben. Der .... sagt nur, dass Sie ihn irgendwo anders in der Klasse platzieren können. Und natürlich müssten Sie ein Array erstellen, also die editList.

48
Mr.Me

Das funktioniert für mich. Es wird ein Boolean zurückgegeben. 

myEditText.hasFocus()
28
Lilylakshi

Lassen Sie Ihre Fragment-Implementierung OnTouchListener & OnFocusChangeListener implementieren:

public class AttributesFragment extends Fragment 
                       implements OnTouchListener, OnFocusChangeListener {

Dann implementieren Sie mit:

@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) {

}

Vergessen Sie nicht, Ihren Listener festzulegen, nachdem Sie Ihre EditText erstellt haben.

editText.setOnTouchListener(this);

Wenn ein Feld EditText standardmäßig eingestellt ist, der Benutzer das Feld jedoch nicht geändert hat, wird das Ereignis onFocusChange nicht ausgelöst.

7
goodies4uall

Das hat bei mir funktioniert.

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

Einfache Codierung:

if(EditText1.isFocused()){
  //EditText1 is focused
}else if(EditText2.isFocused()){
  //EditText2 is focused
}
2
Umasankar

Mit 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!");
    }
});

Beachten Sie, dass die Ansicht innerhalb der Lambda-Funktion tatsächlich eine Instanz eines EditText ist.

0
Raul Olmedo

Implementieren Sie in Ihrer Aktivität oder im Fragment OnFocusChangeListener. 

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

Sie müssen überprüfen, welche Ansicht den Fokus geändert hat, indem Sie die Ansichts-ID mit view.getId () abrufen und entsprechend behandeln.

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

    ...etc
    }
}
0
Sayan Manna