Подтвердить что ты не робот

Как я могу обнаружить сфокусированный EditText в android?

У меня есть номер EditText на моей странице вместе с двумя кнопками. Я хочу, чтобы пользователь коснулся любого поля EditText и нажал любую кнопку, чтобы вставить определенное значение в это самое поле EditText, которое он коснулся. Предоставление ввода с клавиатуры невозможно. Пожалуйста, помогите мне сделать это.

4b9b3361

Ответ 1

Одна вещь, которую вы можете сделать, это объявить глобальную переменную evalue, которая сообщит вам, что является last selected EditText, используя onTouchListener, а затем на основе значения evalue вы можете установить текстовое значение нажмите кнопку. надеюсь, что вы поняли.

код для него может быть следующим:

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

    }

Его логическое кодирование.. не до отметки.. если вы найдете лучший. затем используйте его. спасибо.

Ответ 2

Вы можете использовать View.OnFocusChangeListener для определения того, получил ли какой-либо просмотр (edittext) или потерял фокус.

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

Это относится к вашей деятельности или фрагменту или везде, где у вас есть EditTexts. .... просто говорит, что вы можете поместить его в другое место в классе. И, очевидно, вам нужно создать массив с ними в нем, таким образом, editList.

Ответ 3

Это работает для меня. Он возвращает логическое значение.

myEditText.hasFocus()

Ответ 4

У вас есть Fragment OnTouchListener и OnFocusChangeListener:

public class AttributesFragment extends Fragment 
                       implements OnTouchListener, OnFocusChangeListener {

Затем выполните с помощью:

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

}

Не забудьте установить слушателя после создания EditText

editText.setOnTouchListener(this);

Таким образом, если поле EditText сфокусировано по умолчанию, но пользователь не изменил поле, он не запускает событие onFocusChange.

Ответ 5

Это сработало для меня.

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

Ответ 6

В вашей деятельности или фрагменте реализуйте OnFocusChangeListener.

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

Вам нужно будет проверить, какой вид изменил фокус, получив идентификатор вида с помощью view.getId() и обработав его соответствующим образом.

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

    ...etc
    }
}

Ответ 7

С Java 8 лямбды:

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

Обратите внимание, что представление внутри лямбда-функции на самом деле является экземпляром EditText.

Ответ 8

Простое кодирование:

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